继承与向上转型

2017-06-03  本文已影响5人  Vincent_Jiang

前言

基类

public class Instrument {
    public void play() {
    }

    public static void tune(Instrument instrument) {
        instrument.play();
    }
}

导出类

public class Wind extends Instrument {
    public static void main(String[] args) {
        Wind wind = new Wind();
        Instrument.tune(wind);
    }
}

构造方法调用重写方法

在 new 过程中,首先是初始化父类,父类构造方法调用 description(),description() 被子类重写了,就会调用子类的 description() 方法,子类方法打印 "Cat"。
像这样,在父类构造方法中调用可被子类重写的方法,是一种不好的实践,容易引起混淆,应该只调用 private 的方法。

public class Animal {
    public Animal() {
        description();
    }
    public void description() {
        System.out.println("Animal");
    }
}

public class Cat extends Animal {
    public Cat() {}
    
    @Override
    public void description() {
        System.out.println("Cat");
    }
}

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
    }
}

//output: "Cat"
上一篇下一篇

猜你喜欢

热点阅读