📜  Java继承

📅  最后修改于: 2020-09-23 08:59:00             🧑  作者: Mango

Java中的继承

Java中的继承是一种机制,其中一个对象获取父对象的所有属性和行为。它是OOP(面向对象编程系统)的重要组成部分。

Java继承的思想是可以创建基于现有类的新类。从现有类继承时,可以重用父类的方法和字段。此外,您还可以在当前类中添加新的方法和字段。

继承表示IS-A关系,也称为父子关系。

为什么要在Java中使用继承

  • 对于方法覆盖(因此可以实现运行时多态 )。
  • 用于代码可重用性。

继承中使用的术语

  • 类:类是具有共同属性的一组对象。它是从中创建对象的模板或蓝图。
  • 子类/子类:子类是继承其他类的类。也称为派生类,扩展类或子类。
  • 父类/父类:父类是子类从中继承要素的类。也称为基类或父类。
  • 可重用性:顾名思义,可重用性是一种机制,可在创建新类时方便您重用现有类的字段和方法。您可以使用上一类中已定义的相同字段和方法。

Java继承的语法

class Subclass-name extends Superclass-name  
{  
   //methods and fields  
}  

extend关键字表示您正在建立一个从现有类派生的新类。“扩展”的意思是增加功能。

在Java术语中,被继承的类称为父类或超类,而新类称为子级或子类。

Java继承示例

如上图所示,Programmer是子类,而Employee是超类。这两个类之间的关系是程序员IS-A雇员。这意味着程序员是雇员的一种。

class Employee
{  
    float salary=40000;  
}  
class Programmer extends Employee
{  
      int bonus=10000;  
     public static void main(String args[])
    {  
           Programmer p=new Programmer();  
           System.out.println("Programmer salary is:"+p.salary);  
           System.out.println("Bonus of Programmer is:"+p.bonus);  
    }  
}  

在上面的示例中,Programmer对象可以访问自己的类以及Employee类的字段,即代码可重用性。

Java中的继承类型

根据类,java中可以有三种继承类型:单继承,多继承和分层继承。

在Java编程中,仅通过接口支持多重继承和混合继承。稍后我们将学习接口。


注意:Java通过类不支持多重继承。

当一个类继承多个类时,称为多重继承。例如:

单一继承示例

当一个类继承另一个类时,称为单继承。在下面给出的示例中,Dog类继承了Animal类,因此存在单个继承。

文件:TestInheritance.java

class Animal{  
void eat(){System.out.println("eating...");}  
}  
class Dog extends Animal{  
void bark(){System.out.println("barking...");}  
}  
class TestInheritance{  
public static void main(String args[]){  
Dog d=new Dog();  
d.bark();  
d.eat();  
}}  

输出:

多级继承示例

如果存在继承链,则称为多级继承。在下面的示例中可以看到,BabyDog类继承了Dog类,而Dog类又继承了Animal类,因此存在多级继承。

文件:TestInheritance2.java

class Animal{  
void eat(){System.out.println("eating...");}  
}  
class Dog extends Animal{  
void bark(){System.out.println("barking...");}  
}  
class BabyDog extends Dog{  
void weep(){System.out.println("weeping...");}  
}  
class TestInheritance2{  
public static void main(String args[]){  
BabyDog d=new BabyDog();  
d.weep();  
d.bark();  
d.eat();  
}}  

输出:

层次继承示例

当两个或多个类继承单个类时,称为分层继承。在下面给出的示例中,Dog和Cat类继承了Animal类,因此存在分层继承。

文件:TestInheritance3.java

class Animal{  
void eat(){System.out.println("eating...");}  
}  
class Dog extends Animal{  
void bark(){System.out.println("barking...");}  
}  
class Cat extends Animal{  
void meow(){System.out.println("meowing...");}  
}  
class TestInheritance3{  
public static void main(String args[]){  
Cat c=new Cat();  
c.meow();  
c.eat();  
//c.bark();//C.T.Error  
}}  

输出:

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

为了降低复杂性并简化语言,java不支持多重继承。

考虑一个场景,其中A,B和C是三个类别。C类继承A和B类。如果A类和B类具有相同的方法,并且您从子类对象调用它,则模棱两可地调用A类或B类的方法。

由于编译时错误比运行时错误要好,因此,如果您继承2个类,则Java会呈现编译时错误。因此,无论您使用相同的方法还是使用不同的方法,都会出现编译时错误。

class A{  
void msg(){System.out.println("Hello");}  
}  
class B{  
void msg(){System.out.println("Welcome");}  
}  
class C extends A,B{//suppose if it were  
    public static void main(String args[]){  
   C obj=new C();  
   obj.msg();//Now which msg() method would be invoked?  
}  
}