Java extends关键词



Java extends关键词

Java继承是一种机制,其中一个对象获取父对象的所有属性和行为。它是OOPs(面向对象的编程系统)的重要组成部分。
Java继承的思想是可以创建新的建立在现有类之上的类。从现有类继承时,可以重用父类的方法和字段。此外,您还可以在当前类中添加新的方法和字段。
继承表示
IS-A关系,也称为
parent-child 关系。

为什么在Java中使用继承

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

继承中使用的术语

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

Java继承的语法

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

extends关键字表示您正在创建一个从现有类派生的新类。 "扩展"的意思是增加功能。
在Java的术语中,被继承的类称为父类或超类,而新类称为子级或子类。

Java继承示例

Java extends关键词_https://bianchenghao6.com_【Java 基础教程】_第1张

上图中,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 salary is:40000.0 

Bonus of programmer is:10000

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

java中的继承类型

在类的基础上,java中可以存在三种继承类型: 单层,多层和分层。
在Java编程中,仅通过接口支持多重继承和混合继承。

Java extends关键词_https://bianchenghao6.com_【Java 基础教程】_第2张

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

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

Java extends关键词_https://bianchenghao6.com_【Java 基础教程】_第3张


单个继承示例

当一个类继承另一个类时,称​​为
单个继承。在下面给出的示例中,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();
    }
}

输出:
barking... 

eating...

多级继承示例

如果存在继承链,则称为
多级继承。如下面的示例所示,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();
    }
}

输出:
weeping... 

barking...
eating...

分层继承示例

当两个或多个类继承单个类时,称​​为
分层继承。在下面给出的示例中,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}
}

输出:
meowing... 

eating...


Q)为什么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?}
}

Compile Time Error