當乙個類繼承了某個類時,在子類的構造方法裡,super()必須先被呼叫;如果你沒有寫,編譯器會自動呼叫super()方法,即呼叫了父類的構造方法;
這並不是建立了兩個物件,其實只有乙個子類sub物件;之所以需要呼叫父類的構造方法是因為在父類中,可能存在私有屬性需要在其構造方法內初始化;
package com.lz;
public class extendtest
public class people
} public class man extends people
}public class boy extends man
}public static void main(string args)
以上程式執行結果如下:
---------------建立extendtest例項----------------
extendtest建構函式執行
---------------建立people例項----------------
我是people基類
---------------建立people的子類man例項----------------
我是people基類
我是man子類
---------------建立people的孫子、man的子類boy例項----------------
我是people基類
我是man子類
我是boy孫子類
---------------執行完畢----------------
簡單的說,規則是這樣的:
在子類構造方法中,不管是程式設計師手動呼叫父類構造方法還是編譯器自動呼叫,
子類構造方法必須要呼叫父類的某個構造方法;
被子類呼叫的父類構造方法在父類中必須是存在的;
static,建構函式,子類,父類執行順序
幾天前去華為筆試,遇到了 static變數,建構函式以及父類 子類構造和static執行順序的考題,結果就瞎矇了,也不對。前幾天想起來,就實際寫了 測試一下,結論如下 1 每個類初始化時,會先初始化它的static再執行構造方法,當static已經執行過後,該類的新的例項不會再執行static 2 ...
static,建構函式,子類,父類執行順序
幾天前去華為筆試,遇到了 static變數,建構函式以及父類 子類構造和static執行順序的考題,結果就瞎矇了,也不對。前幾天想起來,就實際寫了 測試一下,結論如下 1 每個類初始化時,會先初始化它的static再執行構造方法,當static已經執行過後,該類的新的例項不會再執行static 2 ...
子類繼承父類,必須宣告父類的建構函式
class entity def init self,object type print parent class init called self.object type object type def get context length self raise exception get con...