Java继承

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

Java继承的作用,你可以在现有类的基础上建立新类。从现有类继承时,可以重用父类的方法和字段。此外,您还可以在当前类中添加新的方法和字段。

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

1 为什么Java中要有继承

  • 有利于方法覆盖(方法覆盖又可以实现运行时多态,后面章节会讲到)。
  • 用于代码可重用性。

2 Java继承的相关术语

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

3 Java继承的语法

class Subclass-name extends Superclass-name  
{  
   //字段和方法
}  

extends关键字表明你这个新的类要继承另一个类。“extends”的意思是增加功能。

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

4 Java继承的示例

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

/**
 * 一点教程网 - http://www.yiidian.com
 */
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("程序员的薪水是:"+p.salary);
        System.out.println("项目奖金是:"+p.bonus);
    }
}

输出结果为:

程序员的薪水是:40000.0
项目奖金是:10000

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

5 Java继承的类型

在类的基础上,Java中可以有三种继承类型:单继承,多继承和分层继承。

在Java编程中,只有接口支持多重继承和混合继承。后面章节我们将学习接口

注意:Java通过类不支持多重继承和混合继承,就像下图一样。

6 单继承的示例

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

TestInheritance.java:

/**
 * 一点教程网 - http://www.yiidian.com
 */
//单继承的示例
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...

7 多继承的示例

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

TestInheritance2.java:

/**
 * 一点教程网 - http://www.yiidian.com
 */
//多继承的示例
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...

8 分层继承的示例

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

/**
 * 一点教程网 - http://www.yiidian.com
 */
//分层继承的示例
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();//这行代码会编译报错
    }} 

输出结果为:

meowing...
eating...

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

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

考虑一个场景,其中A,B和C是三个类别。C类继承A和B类。如果A和B类具有相同的方法,并且你从子类对象调用它,则在调用A或B类的方法时存在歧义。

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

/**
 * 一点教程网 - http://www.yiidian.com
 */
//Java多重继承的错误示范
class A{
    void msg(){System.out.println("Hello");}
}
class B{
    void msg(){System.out.println("Welcome");}
}
class C extends A,B{//  

    public static void main(String args[]){
        C obj=new C();
        obj.msg();//哪个msg方法会被执行呢?是不是存在歧义,所以这个语法不合理!  
    }
}  

以上代码会编译报错!

热门文章

优秀文章