何時子類必須顯式呼叫父類建構函式

2022-04-29 19:30:13 字數 1065 閱讀 5785

11. class person

14. }

15.16. class employee extends person

19. }

20.21. class employeetest

26. }

what is the result?

a. 4321

b. 0000

c. an exception is thrown at runtime.

d. compilation fails because of an error in line 18.

答案:d

答案大家看到了!測試時,18行編譯錯誤,如果在18行的構造方法加入 super(null);就會編譯成功了!我的感覺錯誤就在於沒有顯示呼叫父類的構造方法!可有的時候,不需要顯示呼叫父類方法啊!這是為什麼呢?

//解釋

先理解乙個物件的例項化過程即可。

child extend parent

在例項化child的時候,會先去例項化parent(巢狀的一層層上溯)。

child c = new child();一瞬間做的事情:

例項化是在建構函式中完成的,那麼,呼叫child的建構函式時候,必須先拿到parent的物件也就是呼叫parent的建構函式。

回到你的題目,parent沒有預設建構函式,child也只有乙個帶參建構函式。

child c = new child(p);

要例項化c必須先例項化parent

但是,parent沒有預設建構函式,只能用帶參建構函式例項化它。

但你的子類**中沒有顯式去呼叫parent的那個建構函式,parent就無法完成初始化。

何時子類必須顯式呼叫父類建構函式:

1 父類沒有預設建構函式(這時候子類必須無條件顯式寫乙個任意的建構函式包括預設建構函式,第一句就是super(...))

2 父類有預設建構函式,但子類的建構函式不想jvm呼叫父類預設的那個建構函式, 就要用spuer(...)(如果父類還有其他建構函式)

其他場景,都是可寫可不寫。但是一旦寫了super(...),super的引數怎麼給必須與父類的建構函式相符。

子類繼承父類,必須宣告父類的建構函式

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...

關於為何子類的構造器必須呼叫父類的構造器一次的解答

一 個 空 的 構 造 函 數 看 起 來 雖 然 啥 也 沒 幹 其 實 oop的 編 繹 器 是 從 這 裡 開 始 動 工 建 造 我 們 寫 好 的 類 中 的 信 息 子 類 是 繼 成 父 類 的 子 類 就 會 包 抱 父 類 的 信 息 在 構 造 一 個 子 類 時 父 類 中 的...

Swift子類構造方法呼叫父類構造方法

swift 中子類init呼叫父類的init方法必須寫在最後。如下例項 子類chemistry中init構造方法呼叫父類的init方法完成屬性初始化,呼叫的父類init方法super.init physics physics 必須寫在方法最後一句,否則報錯 class subjects func u...