1. 默認(rèn)構(gòu)造方法:
默認(rèn)構(gòu)造方法是沒有參數(shù)的構(gòu)造方法,可以簡單的分為兩種:
(1) 隱含的默認(rèn)構(gòu)造方法
(2) 程序顯式定義的構(gòu)造方法
在java語言中,每個類至少有一個構(gòu)造方法,為了保證這一點,如果用戶定義的類中沒有構(gòu)造方法,那么java語言將自動提供一個隱含的默認(rèn)構(gòu)造方法,該構(gòu)造方法沒有參數(shù),用public修飾,沒有返回值,并且方法體為空,例如:
public ClassName(){}
當(dāng)然在程序中也可以明確的定義默認(rèn)構(gòu)造方法,
如果在類中定義了一個或者多個構(gòu)造方法,并且所有的構(gòu)造方法都有參數(shù),這個類就失去了默認(rèn)的構(gòu)造方法。如果想保留默認(rèn)的構(gòu)造方法,必須顯式的定義出來。例如:
public class Test(){
public Test(String name){System.out.println(name);};
public Test(int age){System.out.println(age);}
} 對于這個類,如果要定義一個對象Test test = new Test();這個就是錯誤的,因為沒有這個構(gòu)造方法,如果想這樣定義,必須顯式的定義默認(rèn)構(gòu)造方法。
2. 子類調(diào)用父類的構(gòu)造函數(shù)
父類的構(gòu)造函數(shù)不能被子類繼承,但是在子類對象被創(chuàng)建時,如果不顯式調(diào)用父類的構(gòu)造方法,這是子類會調(diào)用父類的默認(rèn)構(gòu)造方法。如果要調(diào)用父類的其他構(gòu)造方法(帶參構(gòu)造方法),必須出使用super顯式的指
使用super必須遵循一下規(guī)則:
(1) 在子類的構(gòu)造方法中不能直接使用父類的構(gòu)造方法名稱直接調(diào)用,而必須使用super語句
(2) 如果在子類的構(gòu)造方法中時用super調(diào)用父類的構(gòu)造方法,他必須作為構(gòu)造方法的第一條語句出現(xiàn)。
總結(jié)
在創(chuàng)建子類的對象時,java虛擬機首先執(zhí)行父類的構(gòu)造方法,然后再執(zhí)行子類的構(gòu)造方法,在多重繼承的情況下,將從最頂層的類的構(gòu)造方法開始執(zhí)行,然后依次執(zhí)行各個類的構(gòu)造方法。