第三章Java中的继承


在这篇文章中,我们将了解 Java 中的继承。它是除抽象、封装和多态之外的 OOP 原则之一。

介绍

这个词Inheritance大家再熟悉不过了。通俗地说,这个词的意思是代代相传的财产和特征。例如,父母的财产或特征会传给他们的孩子和后代。

面向对象编程(通常是OOP概念基于现实生活中的示例,其中存在的每个实体都可以表示为一个对象。因此,作为 OOP 中的基本概念之一,Inheritance它基于我们之前讨论的示例——将属性和特征从父母传给他们的孩子。 Java中的继承,源于OOP的概念,定义为子类或对象(称为子类)从其前辈或父类(称为超类)继承行为和属性(方法和变量)的过程)。让我们通过以下部分更深入地研究 Java 中的继承的概念。

基本语法

Java中的继承是通过使用关键字来实现的extends。这个特殊的词使 Java 编译器明白当前类是继承或扩展另一个类。让我们看一下以下代码片段示例以了解基本语法。

public class B extends A {

// some process or variables

}

上面的片段显示了extends关键字的使用。在 Java 语言中,“extends”的使用表示类 B 是类 A 的子类或子类,称为超类或父类。继承表示IS-A relationship类之间。这里,B 是 A 的子类或子类。

Java中的继承示例

遗产

旁边给出的图片显示了 Java 中继承的简单表示。 这里,Parent 类包含一个整数变量a,是 Child 类的超类,Child 类包含一个整数变量b 。让我们通过代码示例来看看这张图片的表示。

class Parent {

 int a = 5;
}

class Child extends Parent {
 int b= 7;
 public static void main(String args[]){
   Child c = new Child();
   System.out.println(“Value of A =”+c.a);
   System.out.println(“Value of B =”+c.b);
   System.out.println(“Sum=”+(c.a+c.b));
 }
}

上面的代码片段在执行时提供了以下结果:

Value of A =5
Value of B =7
Sum=12

从上面的示例中,我们看到子类 B 能够访问a类 Parent 的变量并在其自己的类中使用它。因此,我们看到使用继承,子类可以利用其超类中的变量和方法。

Java中的继承类型

在面向对象编程中有多种表示父子关系的形式。Java 在类的基础上支持三种类型的继承。本节将进一步讨论各种继承类型以及如何使用 Java 实现它们。

单一继承

这是 Java 中最简单的继承形式,是两个类之间简单的一对一关系。上一节已经讨论了单继承的基本示例,其中单个子类继承了其父类的属性。

单一继承

旁边给出的图片表示类 A(超类)和 B(子类)之间的单一继承 让我们看一个小代码片段作为单一继承的示例。 代码:

class MessageWriter {
   public void display(){
   System.out.println(“You are viewing a method of A”);
   }
}

class MessageDisplayer extends MessageWriter {
     public static void main(String args[]) {
         B obj=new B();
         obj.display();
    }
}

上面的代码片段执行以产生以下输出:

You are viewing a method of A

多级继承

Multi-Level Inheritance顾名思义,它看起来更像是一个基于层的结构。旁边给出的图片代表了一个多级继承结构。在多级继承中,每个类仅以多级或多层架构的形式扩展单个类。

例如,从旁边的图中,我们看到类 C 是类 B 的子类,类 B 是类 A 的子类。因此,B 将依次继承类 A 和 C 的属性和行为, 将从两者继承。 让我们看一个代码片段作为多级继承的示例。

class Animal {
    void eat(){
      System.out.println(“Animals eat”);
  }
}

class Horse extends Animal {
  void call(){
     System.out.println(“Horses neigh”);
  }
}

class Colt extends Horse {
   void desc(){
     System.out.println(“Colts are baby horses”);
  }
}

class TestMultiLevel {
    public static void main(String args[]){
        Colt c = new Colt();
        c.desc();
        c.call();
        c.eat();
    }
}

执行上述代码,得到以下输出:

Colts are baby horses
Horses neigh
Animals eat

分层继承

Hierarchical Inheritance是一种继承类型,其中许多子类扩展单个超类。

分层继承

旁边给出的图片代表了分层继承的一种基本形式。这种继承形式基本上是多个单一继承,其中所有子类都继承自一个超类。这里,类 B 和 C 是类 A 的子类,并继承其属性和行为。 让我们看一个代码片段作为分层继承的示例。 代码:

class Animal {
  void eat(){
    System.out.println(“Animals eat”);
 }
}

class Lion extends Animal {
   void call(){
   System.out.println(“Lions roar”);
  }
}

class Wolf extends Animal {
   void call(){
    System.out.println(“Wolves howl”);
 } 
}

class TestHierarchy{
public static void main(String args[]){
     Wolf w = new Wolf();
     Lion l=new Lion();
     w.call();
     w.eat();
    l.call();
    l.eat();
  }
}

上面的代码在执行时会产生以下输出:

Wolves howl
Animals eat
Lions roar
Animals eat

多重和混合继承

Multiple Inheritance是面向对象编程中的一种继承类型,其中单个子类扩展多个超类。混合继承是一种混合形式的继承,包括多级继承和多级继承。Java不支持多重继承。

多级继承

上图显示了多重继承

混合继承

这张图片描述了混合继承。

为什么Java不支持多重继承?

为了减少复杂性和歧义,Java 不允许使用类进行多重继承。让我们用一个例子来解释歧义。 比如说,有一个类 A 有一个方法display(),而类 B 有另一个方法display()。第三个类 C,扩展了 A 和 B,并且根据 的概念inheritance,能够访问 A 和 B 的 display() 方法。现在,当创建 C 的对象并调用该display()方法时,编译器将不会能够辨别调用哪个显示方法,因为 A 类和 B 类都有同名的方法并由 C 类扩展。

代码:

Class A (){
    public void display ()
    {
     //some code
    } 
}
class B (){
  public void display ()
  {
   //some code 
  } 
}
class C extends A,B () ( Not supported in Java ){
public static void main (){
  C obj = new C ();
  obj.display(); ( Ambiguity between display() of class A and display of class B)
 }
}

为了防止这种歧义,Java 不允许类之间的多重继承,并在尝试多重继承时抛出编译时错误。 注意:然而,Java 使用Interfaces来模拟多重继承。

结论

Inheritance是 Java 的强大武器,有助于使其成为一种广泛接受的语言。它有助于减少代码重复并减少错误。使用在父类中编写的代码,您不再需要为具有相同属性的多个子类编写相同的代码。通过这种方式,java中的继承实现了代码的可重用性,以确保用户更好的可访问性。

这就是java中的继承


原文链接:https://codingdict.com/