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

2021-09-14 00:28:15 字數 900 閱讀 4916

第乙個例子:

class a

//該建構函式自始至終就沒有被呼叫過

public void print()

}class b extends a

//重寫父類中的print()函式

public void print()

}public class main

}

輸出:

null

asdg

總結:1.初始化c2()時,先初始化c2的父類:c1()

初始化c1()的靜態變數和靜態**塊

初始化c2()的靜態變數和靜態**塊

2.初始化c1()的非靜態變數,初始化父類的建構函式

如果父類的建構函式中呼叫的方法被子類重寫,那麼呼叫的會是子類的方法。

3.初始化c2()的非靜態變數,初始化子類的建構函式。

第二個例子:

public class a 

public string s="aaaa";

//父類建構函式

public a()

public void call()

}class b extends a

//重寫父類中的call函式

public void call()

}

輸出:

null

bbbb

aaaa

總結:由於父類第一次呼叫子類的call方法時,子類還沒有初始化非靜態變數以及構造方法(靜態成員被初始化了),因此輸出是null。

通過父類的引用型別變數指向子類型別物件,訪問成員變數時是訪問的父類的成員變數。

(類載入時會為靜態變數賦初值,執行靜態**塊,但不會為例項變數賦初值,只有建構函式執行時才會賦值)

子父類中的建構函式

egclass fu class zi extends fu class extendsdemo3 列印結果為 fu show zi show 為什麼呢?因為在子類建構函式的第一行,有乙個隱式的語句 super 這句話是用於呼叫父類中那個空引數的建構函式,如果父類中只有空引數的建構函式就呼叫那個,如...

子父類中建構函式的特點

子父類中的建構函式 在對子類物件進行初始化時,父類的建構函式也會執行,那是因為子類的建構函式預設第一行有一條隱式的語句 super super 會訪問父類中空引數的建構函式,而且子類中所有的建構函式預設第一行都是super 為什麼子類一定要訪問父類中的建構函式?因為父類中的資料子類可以直接獲取,所以...

子父類中建構函式的特點

子父類中建構函式的特點 在子類構造物件時,發現訪問子類建構函式時,父類建構函式也執行了.為什麼呢?原因是 在子類的建構函式中第一行有乙個預設的隱式語句.super 子類的例項化過程 子類中所有的建構函式都會預設訪問父類中的空引數的建構函式.為什麼子類例項化的時候要訪問父類中的建構函式呢?那是因為子類...