所以說我有一個擴展超類的子類。在什麼情況下,我需要明確鍵入super()
才能讓超類構造函數運行?你什麼時候需要顯式調用超類的構造函數?
我正在看一本關於抽象類的書中的例子,當他們用非抽象的子類擴展它時,子類的默認構造函數是空白的,並且有一個說明超類的默認構造函數將被調用的註釋。與此同時,我也看到了在這裏的情況下,某人的問題沒有明確地呼籲super()
。
區別於從子類的默認/非默認構造函數調用超類的默認/非默認構造函數?
所以說我有一個擴展超類的子類。在什麼情況下,我需要明確鍵入super()
才能讓超類構造函數運行?你什麼時候需要顯式調用超類的構造函數?
我正在看一本關於抽象類的書中的例子,當他們用非抽象的子類擴展它時,子類的默認構造函數是空白的,並且有一個說明超類的默認構造函數將被調用的註釋。與此同時,我也看到了在這裏的情況下,某人的問題沒有明確地呼籲super()
。
區別於從子類的默認/非默認構造函數調用超類的默認/非默認構造函數?
你從未需要的正好
super();
那會是什麼那裏,如果你不指定任何東西。您只需要指定構造函數調用,如果:
你聲稱:
同時我也看到了在這裏的實例,其中一個人的問題不是explic它打電話給super()。
你能舉幾個例子嗎?我無法想象這怎麼可能...
如果你沒有明確地調用一個超級構造函數,那麼將調用參數less構造函數(super())。這意味着如果超類沒有可用的無參數構造函數,則必須自己調用特定的構造函數。
但是,即使您可以使用默認構造函數 - 取決於您的代碼,通常情況下您還是需要不同的構造函數。
另請注意,如果沒有聲明構造函數,編譯器會自動生成一個公共的默認構造函數,但只要您編寫自己的構造函數,就不會再發生這種情況。
super()
方法總是在子類的構造函數中調用,即使它沒有明確寫入代碼。
您需要編寫它的唯一時間是在具有不同初始化參數的超類中有多個super(...)
方法。
「唯一需要編寫它的時間是,如果超類中有幾個具有不同初始化參數的超類(...)方法。」不對。只要有一個可用的參數較少的構造函數,就可以有一百個其他構造函數沒有任何問題。 – Voo 2011-06-11 21:28:12
是我還是沒有答案解決「爲什麼你需要調用一個超類的構造函數在一個子類」 – 2016-04-09 08:03:45