簡體   English   中英

在沒有構造函數的類上調用super()

[英]Calling super() on a class with no constructor

我剛剛注意到在工作中分配的一個非常大的項目的代碼庫中,一個特定的類沒有構造函數。 它的子類雖然調用了super()

有人可以解釋當子類調用super()時會發生什么,但父類中沒有構造函數?

(我可以猜測效果就像調用一個空構造函數,但我想知道幕后是否還有其他事情發生)。

如果你沒有任何參數化構造函數,我嚴格意味着沒有構造函數,那么只有java才會為你添加一個默認構造函數(一個沒有參數)。

每個構造函數都必須調用它的超類的構造函數。 您不能在子類構造函數中執行任何其他操作,直到調用繼承樹中的所有超類構造函數。 因此,此調用必須是子類構造函數的第一行。如果您不再提供一個,那么java會為您執行此操作。

參考

為什么this()和super()必須是構造函數中的第一個語句?

如果一個類沒有任何構造函數意味着它由java編譯器賦予空構造函數

如果放置空構造函數 ,則編譯器不會,因為您已經提到過它。

現在如果你想讓自己的構造函數擁有自己的參數,那么java編譯器就不會有任何默認的構造函數

有關構造函數的更多信息,請查看此處

子類構造函數在執行任何語句之前總是先調用其父構造函數。 如果父類中沒有consturctor,那么無論是否顯式調用它,super()調用都將由java編譯器添加到代碼中,因此將由JVM執行。

當類沒有聲明任何構造函數時,java編譯器將提供沒有主體的默認無參數構造函數。 在基類構造函數中調用super()將調用該默認構造函數。

有人可以解釋當子類調用super()時會發生什么,但父類中沒有構造函數?

如果父類沒有任何構造函數,那么java編譯器將調用它的默認構造函數。 如果您不想調用默認構造函數,則可以在該類中創建自己的空構造函數。

如果您沒有明確提供,編譯器會在您的類中添加一個沒有參數的默認構造函數。 所以在你的情況下,它調用默認構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM