2013-06-19 19 views
12

私のコードには内部クラスがあります。私はインスタンスにパブリックアクセスを与えたいが、外部クラスだけが "プライベート"アクセスのようにこのインスタンスを作成できるはずです。適切に小さなパッケージを作ることなく(あるいはそのような内部クラスごとにパブリックインターフェイスを作成することなく)可能ですか?Java - 内部クラスのコンストラクタ - 外部クラスのみに使用可能

(申し訳ありませんが私の英語が悪い場合:P)

答えて

23

ことが可能です。 の内部クラスpublicを宣言しますが、コンストラクタprivateを宣言してください。この方法では、それを囲むクラスとその内部でのみ作成できますが、外部からは作成できません。

+1

本当に外部クラスは内部クラスのプライベートフィールドにアクセスできますか?ありがとうございました! –

+0

このソリューションは間違っていますか? –

+1

いいえ、この解決策は正しいです、外部クラスは内部クラスのすべてのプライベートフィールド、メソッド、およびコンストラクタを見ることができます。 – WilQu

1

デフォルトでは、あなたが最初に外部クラスを持っている必要があり、内部クラスのインスタンスを取得したい場合。

inner classは、その囲むクラスのメンバーです。

これは何もする必要はありません。

非静的な入れ子になったクラス(インナークラス)は、彼らが私は正しい方法であなたの質問を理解願ってい

プライベート宣言されている場合でも、包含するクラスの他のメンバーへのアクセス権を持っています。

くださいrefer.

+0

プライベートですので、あなたが合法的に民間の既定のコンストラクタを呼び出すことはできません外側のオブジェクト(クラスはプライベートにすることはできません)。 –

0

したがって、内部クラスのprivateを作成してください。

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

それはコンストラクタだけ外側のクラスのために利用可能であるべきである(そう、公開することはできません)、これを使用することが可能でなければなりません

+0

Innerがプライベートな場合、これをOuterから使用することはできません。私はこのクラスに特有のパブリックインターフェイスを作ることができますが、よりよいものがあれば、この解決策を避けたいと思います。 –

+0

これは、あなたのこの質問「このインスタンスを作成できる外部クラスのみ」を解決したものです。あなたは本当に何をしたいのですかあなたの質問を精緻化することができます!それは明らかではない。 – iMBMT

+0

'Outer'オブジェクトだけが' Inner'のインスタンスを構築するためにアクセスできる必要があります。今は明らかですか?ごめんなさい :) –

関連する問題