key point
子類構(gòu)造函數(shù)
public class Father {
public void draw() {
System.out.println("father draw");
}
public Father() {
System.out.println("father:before draw");
draw();
System.out.println("father:after draw");
}
}
public class Son extends Father {
private int number = 1;
public Son(int number) {
this.number = number;
System.out.println("init number:" + this.number);
}
@Override
public void draw() {
System.out.println("son draw number:" + this.number);
}
}
public class MainTest <T> extends Object{
public static void main(String[] args) {
new Son(5);
}
}
輸出結(jié)果
father:before draw
son draw number:0
father:after draw
init number:5
子類構(gòu)造函數(shù)的第一行都是super(); 如果沒有super()的話 編譯器自動增加super.
基類的構(gòu)造函數(shù)調(diào)用draw. 因?yàn)関irtureinvoke 的關(guān)系 會調(diào)用子類的draw
子類的number 沒有被初始化完成. 只有默認(rèn)的0
完成基類的構(gòu)造, 回到子類
完成構(gòu)造