2011-08-01 46 views

回答

12

如果您製作所有的構造函數private,那麼該類將不再可擴展。

public class TestName { 

    private TestName(){do something} 

} 

想知道爲什麼,檢查節3.4.4.1,'The default constructor'。通過聲明你的私人默認的構造函數,該段的最後一句成立:

這樣的[私人]構造函數永遠不能從類之外調用,但它防止了默認構造函數的自動插入。

通過在超類中聲明一個不可訪問的構造函數非常有效,您的子類可以調用沒有(其他)構造函數,因此Java會阻止編譯。

+0

如果您仍然需要公共構造函數的替代方法,那麼可以添加一個靜態方法,該方法使用私有構造函數返回一個新對象: – pvoosten

+0

@emboss能解釋爲什麼使構造函數爲私有使其不可擴展 – RMT

+2

子類中的每個構造函數都必須調用超級構造函數。如果不是,則使用隱式構造函數。使所有超級構造函數都是私有的(包括隱含的)將導致編譯錯誤。 – Vlad

3

如果構造函數由於在「// do something」註釋中插入代碼而失敗,則拋出異常。

其他選項 - 最終類或私有構造函數 - 通常是更好的選擇,因爲它們在編譯時報告錯誤,而不是運行時。但是如果失敗應該是有條件的,或者如果有人正在測試你的知識,那麼拋出異常是通常的方法。

[專家的問題:如果構造函數拋出一個異常,程序是否還有任何方式可以結束對新創建的實例的引用? (提示:是。)]

+1

如果可以的話,我會給你+10的真棒專家問題。謝謝,傑夫。 – Raku

0

您可以製作該類的私有構造函數。

相關問題