繼承 父類子類建構函式的執行順序

2021-08-08 07:23:56 字數 945 閱讀 7103



當乙個類繼承了某個類時,在子類的構造方法裡,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...