java继承

关键字 extends

 关键字extends表明正在构造的新类派生于一个已存在的类,也就是说通过extends申明的类是根据一个已经存在的类创建成功的。

 这个已存在的类被称为 "父类" , "基类", "超类";新类被称为 "子类", "派生类", "孩子类"。其中 父类子类是程序员最常用的术语。

作用

 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

 在子类中可以增加字段、添加方法或覆盖父类的方法,不过继承绝对不会删除任何字段或方法。

public class Demo{

    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.setName("小猫");
        cat.eat();
    }

}

class Animal{
    private String name;

    public void eat(){
        System.out.println(name+"正在吃!");
    }

    public void setName(String name){
        this.name = name;
    }
}

class Cat extends Animal{

}

// 输出结果
小猫正在吃!

 上面的代码中有一个Animal类,其中Cat类继承Animal。Cat类继承自Animal,虽然Cat类中没有定义任何的字段和方法,但是代码没有任何错误并且有输出结果,这是因为Cat继承了Animal中的公开的方法,所以子类继承于父类,子类可以使用父类中公开的方法。

覆盖方法

 父类中的有些方法对于子类并不一定完全适用。需要在子类中定义一个和父类相同的方法名来覆盖父类中的方法。

代码案例
public class Demo{

    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.setName("小猫");
        cat.eat();
    }

}

class Animal{
    private String name;

    public void eat(){
        System.out.println(name+"正在吃!");
    }

    public void setName(String name){
        this.name = name;
    }
}

class Cat extends Animal{
    public void eat(){
        System.out.println("我正在吃");
    }
}
// 输出结果
我正在吃

 Cat类中的eat()方法和父类Animal中的eat()方法相同。所以在调用eat()方法时,子类的eat()方法会覆盖父类中的eat()方法。

super关键字

子类中调用父类中的方法
public class Demo{
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.setName("小猫");
        cat.hello();
    }
}
class Animal{
    private String name;

    public void eat(){
        System.out.println(name+"正在吃!");
    }
    public void setName(String name){
        this.name = name;
    }
}

class Cat extends Animal{
    public void hello(){
        super.eat();
    }
}
// 输出结果
小猫正在吃!

 Cat类中定义一个hello()方法,方法中通过supper关键字调用父类中的eat()方法,最后在main方法中调用这个hello()方法,最后的结果如上显示。

  • supper关键字可以在子类中调用父类中公开的方法或属性。
子类中通过父类的构造函数初始化

 super关键字有两个含义:一时调用父类中的方法,二是调用父类中的构造器。

代码解释

public class Demo{
    public static void main(String[] args) {
        Cat cat = new Cat("小猫");
        cat.eat();
    }
}
class Animal{
    private String name;

    public Animal(String name){
        this.name = name;
    }

    public void eat(){
        System.out.println(name+"正在吃!");
    }
}

class Cat extends Animal{
    public Cat(String name){
        super(name);
    }

}
// 输出结果
小猫正在吃!

 这里Cat类中有一个构造函数,在构造函数中通过supper关键字调用父类中的构造函数。最终完成Animal父类中的name字段初始化。

继承层次

 继承并不仅限于一个层次,可以一直往下继承。如果明确表明一个类不在拥有子类,应该显著的在类上通过final关键字标明。

 由一个公共父类派生的所有类的集合称为继承层次,在继承层次中,从某个特定的类到其祖先类的路径称为该类的继承链。

 如图:
继承层次.png

 上图中Class A 继承 Class B, Class B 继承Class A;这样的层次关系就是继承的层次。

# 基础 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×