在Java中继承

时间:2020-02-23 14:36:16  来源:igfitidea点击:

在本教程中,我们将看到Java中的继承。
除了抽象,封装和多态性之外,它是oops原则之一。

介绍

这个单词 Inheritance对每个人都很熟悉。
在共同的术语中,这个词意味着财产的遗产和从代代生成的特征。
例如,父母的财产或者特征被交给他们的孩子和即将到来的世代。

面向对象的编程(通常OOP)概念基于现实生活示例,其中每个实体可以表示为对象。

因此,是OOP中的基本概念之一, Inheritance基于我们早些时候讨论的例子 - 遗留到父母对孩子的财产和特征。
从oop的概念中派生的Java中的继承被定义为子类或者对象(称为子类)从其前辈或者父类继承的进程(称为超级类) )。

让我们深入了解Java的继承概念,并使用以下部分。

基本语法

Java中的继承是通过使用关键字实现的 extends
这个特殊的单词使Java编译器了解当前类是继承或者扩展另一个类。
让我们查看以下播放示例以了解基本语法。

public class B extends A {
 
//some process or variables
 
}

上面的片段显示使用 extends关键词。
在Java的语言中,使用"扩展"表示B类是A类的子类或者子类,称为超级类或者父级。

继承代表A. IS-A relationship在程序之间。
其中B是A的孩子或者子类。

Java中继的示例

旁边的图片显示了Java中继承的简单表示。
其中类父级包含整数变量 a并且是包含整数变量的类的超级类 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));
 }
}

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

a = 5值B = 7 sum = 12的值

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

Java中继承的类型

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

单继承

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

沿着旁边的图片表示类(超级类)和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();
    }
}

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

我们正在查看一种方法

多级继承

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();
    }
}

分层继承

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();
  }
}

多个和混合继承

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

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

为降低复杂性和歧义,Java不允许使用类的多重继承。
让我们用一个例子解释歧义。
说,有一个A类具有一种方法 display()和B类有另一种方法 display()
第三类C,延伸A和B且根据概念 inheritance,能够访问A和B的两个显示()方法,现在,在创建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是使用接口模拟多重继承。

总结

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