Java基础 专题
专题目录
您的位置:java > Java基础专题 > Java继承
Java继承
作者:--    发布时间:2019-11-20 01:15:37

java中的继承是一种机制,表示为一个对象获取父对象的所有属性和行为。

在java中继承是:可以创建基于现有类构建新的类。 当您从现有类继承时,就可以重复使用父类的方法和字段,也可以在继承的新类中添加新的方法和字段。

继承表示is-a关系,也称为父子关系。

为什么在java中使用继承?

对于方法覆盖(因此可以实现运行时的多态性),提高代码可重用性。在java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写(覆盖)。

java继承的语法

class subclass-name extends superclass-name  
{  
   //methods and fields  
}

extends关键字表示正在从现有类派生创建的新类。 “extends”的含义是增加功能。在java的术语中,继承的类称为父类或超类,新类称为子或子类。

java继承示例

如上图所示,programmer是子类,employee是超类。 两个类之间的关系是programmer is-a employee. 它表示 programmer 是一种 employee 的类型。

参考下面示例代码的实现 -

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中的类不支持多继承。

当一个类扩展多个类,即被称为多重继承。 例如:

(1). 单一继承示例

文件 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...

(2). 多级继承示例

文件 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...

(3). 多级继承示例

文件 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...

问题:为什么在java中不支持多重继承?

为了降低复杂性并简化语言,java中不支持多重继承。想象一个:abc是三个类。 c类继承ab类。 如果ab类有相同的方法,并且从子类对象调用它,ab类的调用方法会有歧义。

因为编译时错误比运行时错误好,如果继承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?
    }
}

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册