[英]Calling super() on a class with no constructor
我剛剛注意到在工作中分配的一個非常大的項目的代碼庫中,一個特定的類沒有構造函數。 它的子類雖然調用了super()
。
有人可以解釋當子類調用super()
時會發生什么,但父類中沒有構造函數?
(我可以猜測效果就像調用一個空構造函數,但我想知道幕后是否還有其他事情發生)。
如果你沒有任何參數化構造函數,我嚴格意味着沒有構造函數,那么只有java才會為你添加一個默認構造函數(一個沒有參數)。
每個構造函數都必須調用它的超類的構造函數。 您不能在子類構造函數中執行任何其他操作,直到調用繼承樹中的所有超類構造函數。 因此,此調用必須是子類構造函數的第一行。如果您不再提供一個,那么java會為您執行此操作。
參考
如果一個類沒有任何構造函數意味着它由java編譯器賦予空構造函數 。
如果放置空構造函數 ,則編譯器不會,因為您已經提到過它。
現在如果你想讓自己的構造函數擁有自己的參數,那么java編譯器就不會有任何默認的構造函數
子類構造函數在執行任何語句之前總是先調用其父構造函數。 如果父類中沒有consturctor,那么無論是否顯式調用它,super()調用都將由java編譯器添加到代碼中,因此將由JVM執行。
當類沒有聲明任何構造函數時,java編譯器將提供沒有主體的默認無參數構造函數。 在基類構造函數中調用super()
將調用該默認構造函數。
有人可以解釋當子類調用super()時會發生什么,但父類中沒有構造函數?
如果父類沒有任何構造函數,那么java編譯器將調用它的默認構造函數。 如果您不想調用默認構造函數,則可以在該類中創建自己的空構造函數。
如果您沒有明確提供,編譯器會在您的類中添加一個沒有參數的默認構造函數。 所以在你的情況下,它調用默認構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.