<EffectiveJava>读书笔记--01继承的使用注意

1, 父类的构造器方法中不能调用能够被子类重写的方法.

  分析:

    当初始化一个子类时, 首先要初始化父类, 即调用父类的构造方法;

    如果父类的构造方法中调用了可被重写的其它方法, 那么此时调用的其实是该子类中重写的方法;

    因此子类还没有初始化, 所以可能会造成一些问题.

    示例代码如下:

    父类:

public class Father1 {
    public Father1() {
        overRide1();
    }

    public void overRide1(){
        System.out.println("父类的成员方法..................................");
    }
}

子类:

public class Son1 extends Father1 {

    private final Date date;
    public Son1() {
        date = new Date();
    }

    @Override
    public void overRide1() {
        System.out.println(date);
    }

    public static void main(String[] args) {
        Son1 son1 = new Son1();
        son1.overRide1();
    }
}

如果运行子类的main方法, 那么控制台的输出的结果其实是:

null
Mon Apr 10 12:55:48 CST 2017

说明父类初始化时, 构造方法中调用的是子类的overRide1方法;

原文地址:https://www.cnblogs.com/wyisprogramming/p/6688715.html