📅  最后修改于: 2020-09-23 08:59:00             🧑  作者: Mango
Java中的继承是一种机制,其中一个对象获取父对象的所有属性和行为。它是OOP(面向对象编程系统)的重要组成部分。
Java继承的思想是可以创建基于现有类的新类。从现有类继承时,可以重用父类的方法和字段。此外,您还可以在当前类中添加新的方法和字段。
继承表示IS-A关系,也称为父子关系。
class Subclass-name extends Superclass-name
{
//methods and fields
}
extend关键字表示您正在建立一个从现有类派生的新类。“扩展”的意思是增加功能。
在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通过类不支持多重继承。
当一个类继承多个类时,称为多重继承。例如:
当一个类继承另一个类时,称为单继承。在下面给出的示例中,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不支持多重继承。
考虑一个场景,其中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?
}
}