繼承&構造函數
阿新 • • 發佈:2018-01-18
ons ring 獲取 成員變量 ati 繼承 col 父類 .sh 子父類中的構造函數的特點。
在子類構造對象時,發現,訪問子類構造函數時,父類也運行了。
為什麽呢?
原因是:在子類的構造函數中第一行有一個默認的隱式語句。 super();
子類的實例化過程:子類中所有的構造函數默認都會訪問父類中的空參數的構造函數。
為什麽子類實例化的時候要訪問父類中的構造函數呢?
那是因為子類繼承了父類,獲取到了父類中內容(屬性),所以在使用父類內容之前,
要先看父類是如何對自己的內容進行初始化的。
所以子類在構造對象時,必須訪問父類中的構造函數。
為什麽完成這個必須的動作,就在子類的構造函數中加入了super()語句。
如果父類中沒有定義空參數構造函數,那麽子類的構造函數必須用super明確要調用
父類中哪個構造函數。同時子類構造函數中如果使用this調用了本類構造函數時,
那麽super就沒有了,因為super和this都只能定義第一行。所以只能有一個。
但是可以保證的是,子類中肯定會有其他的構造函數訪問父類的構造函數。
註意:supre語句必須要定義在子類構造函數的第一行。因為父類的初始化動作要先完成。
classFu { Fu() { super(); show(); return; } void show() { System.out.println("fu show"); } } class Zi extends Fu { int num = 8; Zi() { super(); //-->通過super初始化父類內容時,子類的成員變量並未顯示初始化。等super()父類初始化完畢後, //才進行子類的成員變量顯示初始化。System.out.println("zi cons run...."+num); return; } void show() { System.out.println("zi show..."+num); } } class ExtendsDemo5 { public static void main(String[] args) { Zi z = new Zi(); z.show(); } }
繼承&構造函數