1. 程式人生 > >繼承&構造函數

繼承&構造函數

ons ring 獲取 成員變量 ati 繼承 col 父類 .sh

子父類中的構造函數的特點。 在子類構造對象時,發現,訪問子類構造函數時,父類也運行了。 為什麽呢? 原因是:在子類的構造函數中第一行有一個默認的隱式語句。 super(); 子類的實例化過程:子類中所有的構造函數默認都會訪問父類中的空參數的構造函數。 為什麽子類實例化的時候要訪問父類中的構造函數呢? 那是因為子類繼承了父類,獲取到了父類中內容(屬性),所以在使用父類內容之前, 要先看父類是如何對自己的內容進行初始化的。 所以子類在構造對象時,必須訪問父類中的構造函數。 為什麽完成這個必須的動作,就在子類的構造函數中加入了super()語句。 如果父類中沒有定義空參數構造函數,那麽子類的構造函數必須用super明確要調用 父類中哪個構造函數。同時子類構造函數中如果使用this調用了本類構造函數時, 那麽super就沒有了,因為super和this都只能定義第一行。所以只能有一個。 但是可以保證的是,子類中肯定會有其他的構造函數訪問父類的構造函數。 註意:supre語句必須要定義在子類構造函數的第一行。因為父類的初始化動作要先完成。
class
Fu { 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(); } }

繼承&構造函數