2013-10-30 63 views
-4

隱式超級構造函數示例()對於默認構造函數是不可見的。必須定義一個顯式構造函數。是因爲我定義了一個私有構造函數,然後嘗試繼承其他類中的類?使用私有構造函數繼承一個類

+0

而你的代碼是...? –

+3

如果該類唯一的構造函數是聲明爲'private'的無參數構造函數,則不能有子類。 – afk5min

+0

爲什麼你們投下這樣的問題,如果這對你來說太簡單了,那不適合其他人。 –

回答

6

這是因爲我定義了一個私有構造函數,然後嘗試繼承其他類中的類?

是的。如果你的只有構造函數是私有的,那麼你不能創建該類的子類,因爲沒有可訪問的構造函數可以鏈接到 - 將嵌套類留在一邊(在可訪問性發生變化的地方)。

考慮讓你的構造函數受到保護,如果你真的想要能夠繼承原始類。

+0

+1你可以有嵌套的子類。您必須決定是否需要可以從其他類使用的構造函數,例如受保護的,或者你沒有。 –

+0

@PeterLawrey:IIRC在Java中,嵌套子類將無法訪問封閉類的私有構造函數(與C#不同),但是*可能會*使外部類子類成爲具有私有構造函數的嵌套類。 。如果由於其他原因合法。我不想在這裏進入。 –

+0

這在Java的'公共類A編譯就好{ 私營A(){ } 靜態類B擴展A { 私人B(){ } } 靜態C級擴展B { 私人C( ){ } } } ' –

0

如果你想要子類,那麼你需要從子類的構造函數中顯式地調用超級構造函數,並且由於它是私有的,所以你不能調用它!因此,從被保護的子類創建超級類的構造函數至少可訪問。