1. 程式人生 > >Java 父類建構函式中呼叫子類重寫的方法

Java 父類建構函式中呼叫子類重寫的方法

參考文章
看一段程式碼:

public class main_class {
    public static void main(String[] args){
        new c2();
    }
}
class c1{
    String name="aaaaaa";
    //父類建構函式
    public c1(){
        print();
    }
//該建構函式自始至終就沒有被呼叫過
    public void print(){
        System.out.println(name);
    }
}

class c2 extends c1{
    String name="asdg"
; //建構函式: public c2(){ System.out.println(name); } //重寫父類中的print()函式 public void print(){ System.out.println(name); } }
輸出:
null
asdg

分析:

1.初始化c2()時,先初始化c2的父類:c1()
初始化c1()的靜態變數和靜態程式碼塊
初始化c2()的靜態變數和靜態程式碼塊
2.初始化c1()的非靜態變數,初始化父類的建構函式。
  如果父類的建構函式中呼叫的方法被子類重寫,那麼呼叫的會是子類的方法。
3.初始化c2()
的非靜態變數,初始化子類的建構函式。