對引用1中的**做了部分修改,同時借鑑引用2的結論。
public abstract class myclass
public static void main(string args)
public abstract void initvalue();
public void show()
class man extends myclass
@override
public string tostring()
}
執行結果:
name:qiujuer age:23
show:name:聶小倩 age:18
結論:當例項化子類物件時,首先要載入父類的class檔案進記憶體,靜態**塊由於有static修飾, 所以是隨著類的建立而執行,所以父類靜態**塊最先被執行,子類class檔案再被載入,同理靜 態**塊被先執行;例項化子類物件要先呼叫父類的構造方法,而呼叫父類構造方法前會先執行 父類的構造**塊,因此就有如下順序:
父類靜態**塊——>子類靜態**塊——>父類構造塊——>父類構造方法——>子類構造 塊——>子類構造方法
其中,在父類構造方法中若呼叫一般方法且被子類覆蓋,則執行的是子類中的方法,同時, 成員的初始化順序為:
子類屬性預設初始化 ——>父類建構函式初始化(子類建構函式第一行預設呼叫super();)——>子類屬性顯示初始化(指定初始化值)——>子類建構函式初始化
如有問題還請指正!
引用1:引用2:
父類建構函式與子類建構函式的關係
父類 public class parent public void setname string name public parent public parent string name 子類 public class son extends parent public son string na...
C 子類父類建構函式的關係
構造方法用來初始化類的物件,與父類的其它成員不同,它不能被子類繼承 子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法 因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。如果沒有顯式的建構函式,編譯器會給乙個預設的建構函式,並且該預設的建構函式僅僅...
父類建構函式 子類建構函式
1.子類可以通過super關鍵字來顯式地呼叫父類的建構函式。2.當父類沒有提供無引數的建構函式時,子類也不可以有無參建構函式,且子類的建構函式中必須顯式的呼叫父類的建構函式 3.如果父類提供了無引數的建構函式,此時子類的建構函式就可以不顯式的呼叫父類的建構函式,預設呼叫父類的無參建構函式。4.只要父...