我的代碼中有內部類。我想讓公共訪問它的實例,但只有外部類應該能夠創建這個實例,就像在「私有」訪問中一樣。如果沒有製作適當的小包裝(或者爲每個這樣的內部類別創建公共接口),有沒有可能?Java - 內部類構造函數 - 只允許外部類
(很抱歉,如果我的英文不好:P)
我的代碼中有內部類。我想讓公共訪問它的實例,但只有外部類應該能夠創建這個實例,就像在「私有」訪問中一樣。如果沒有製作適當的小包裝(或者爲每個這樣的內部類別創建公共接口),有沒有可能?Java - 內部類構造函數 - 只允許外部類
(很抱歉,如果我的英文不好:P)
這是可能的。聲明你的內部類公共,但它的構造函數私人。這樣,您只能在封閉類和本身內部創建它,而不能從外部創建它。
默認情況下,如果你想獲得你需要先有外部類的內部類的實例。
A inner class是其封閉類的成員。
您無需爲此做任何事情。
非靜態內部類(內部類)可以訪問外部類中的其他成員,即使它們被聲明爲private
我希望我理解你的問題的正確途徑。
構造應僅用於外部類(因此不能是公開的)是可用的,但它應該是可以使用該對象不在外面(所以班級不能是私人的)。 –
所以製作內部類private
。
public class Outer {
private class Inner {}
public String foo() {
return new Inner().toString();
}
}
你不能合法調用私有的默認構造函數,因爲它是私人
當Inner是私人的,我不能使用這個外面。我可以爲這個類創建特定的公共接口,但是我想避免這個解決方案,如果有更好的解決方案。 –
它是你這個問題的解決方案'只有外部類應該能夠創建這個實例'。你能否詳細說明你的問題你真的想要什麼!不清楚。 – iMBMT
只有'Outer'對象才能訪問構造'Inner'的實例。現在清楚嗎?對不起:) –
真的外面的類可以訪問內部類的私有字段嗎?很高興知道它是否有效,謝謝! –
那麼這個解決方案是錯誤的? –
不,這個解決方案是正確的,外部類可以看到內部類的所有私有字段,方法和構造函數。 – WilQu