2013-06-19 147 views
12

我的代碼中有內部類。我想讓公共訪問它的實例,但只有外部類應該能夠創建這個實例,就像在「私有」訪問中一樣。如果沒有製作適當的小包裝(或者爲每個這樣的內部類別創建公共接口),有沒有可能?Java - 內部類構造函數 - 只允許外部類

(很抱歉,如果我的英文不好:P)

回答

23

這是可能的。聲明你的內部類公共,但它的構造函數私人。這樣,您只能在封閉類和本身內部創建它,而不能從外部創建它。

+1

真的外面的類可以訪問內部類的私有字段嗎?很高興知道它是否有效,謝謝! –

+0

那麼這個解決方案是錯誤的? –

+1

不,這個解決方案是正確的,外部類可以看到內部類的所有私有字段,方法和構造函數。 – WilQu

1

默認情況下,如果你想獲得你需要先有外部類的內部類的實例。

A inner class是其封閉類的成員。

您無需爲此做任何事情。

非靜態內部類(內部類)可以訪問外部類中的其他成員,即使它們被聲明爲private

我希望我理解你的問題的正確途徑。

refer.

+0

構造應僅用於外部類(因此不能是公開的)是可用的,但它應該是可以使用該對象不在外面(所以班級不能是私人的)。 –

0

所以製作內部類private

public class Outer { 
    private class Inner {} 
     public String foo() { 
      return new Inner().toString(); 
     } 
} 

你不能合法調用私有的默認構造函數,因爲它是私人

+0

當Inner是私人的,我不能使用這個外面。我可以爲這個類創建特定的公共接口,但是我想避免這個解決方案,如果有更好的解決方案。 –

+0

它是你這個問題的解決方案'只有外部類應該能夠創建這個實例'。你能否詳細說明你的問題你真的想要什麼!不清楚。 – iMBMT

+0

只有'Outer'對象才能訪問構造'Inner'的實例。現在清楚嗎?對不起:) –

相關問題