如何在沒有final
關鍵字的情況下實現此目的?我必須改變的構造函數?如何在不使用final關鍵字的情況下讓類不能擴展?
public final class testName {
testName() {
//do something
}
}
如何在沒有final
關鍵字的情況下實現此目的?我必須改變的構造函數?如何在不使用final關鍵字的情況下讓類不能擴展?
public final class testName {
testName() {
//do something
}
}
如果您製作所有的構造函數private
,那麼該類將不再可擴展。
public class TestName {
private TestName(){do something}
}
想知道爲什麼,檢查節3.4.4.1,'The default constructor'。通過聲明你的私人默認的構造函數,該段的最後一句成立:
這樣的[私人]構造函數永遠不能從類之外調用,但它防止了默認構造函數的自動插入。
通過在超類中聲明一個不可訪問的構造函數非常有效,您的子類可以調用沒有(其他)構造函數,因此Java會阻止編譯。
如果構造函數由於在「// do something」註釋中插入代碼而失敗,則拋出異常。
其他選項 - 最終類或私有構造函數 - 通常是更好的選擇,因爲它們在編譯時報告錯誤,而不是運行時。但是如果失敗應該是有條件的,或者如果有人正在測試你的知識,那麼拋出異常是通常的方法。
[專家的問題:如果構造函數拋出一個異常,程序是否還有任何方式可以結束對新創建的實例的引用? (提示:是。)]
如果可以的話,我會給你+10的真棒專家問題。謝謝,傑夫。 – Raku
您可以製作該類的私有構造函數。
爲什麼不使用final? – fvu
你的動機是什麼? final關鍵字應該符合你的上述要求。你想成爲java的語法專家嗎? – blowyourheart
是的,這是一個測試,我不得不解決 – MoglisSs