3

次のプログラムを検討してください。

public class A
{
    public static void main(String[] args)
    {
        class B
        {
            private B()
            {
                System.out.println("local");
            }
        }
    // how are we able to create the object of the class having private constructor
    // of this class.
    B b1= new B();
    System.out.println("main");
    }
}

出力: ローカルメイン

プライベートコンストラクターを持つクラスは、クラス内でのみオブジェクトを作成できることを意味しますが、ここではクラス外でインスタンスを作成できます。クラスBの外でBのオブジェクトを作成する方法を誰か説明できますか??

4

4 に答える 4

1

JLS 6.6.1を参照してください。

それ以外の場合、メンバーまたはコンストラクターがプライベートであると宣言されている場合、メンバーまたはコンストラクターの宣言を囲む最上位クラス (§7.6) の本体内で発生した場合にのみ、アクセスが許可されます。

これを実装する方法は、パッケージで保護された合成メソッドを使用することです。

「内部クラスのプライベート メンバーを隠したい場合は、パブリック メンバーを使用してインターフェイスを定義し、このインターフェイスを実装する匿名の内部クラスを作成できます。このコードを参照してください:」

class ABC{
private interface MyInterface{
    public void printInt();
}

 private static MyInterface mMember = new MyInterface(){
 private int x=10;

    public void printInt(){
    System.out.println(String.valueOf(x));
 }
};

 public static void main(String... args){
   System.out.println("Hello :: "+mMember.x); ///not allowed
   mMember.printInt(); // allowed
 }
} 
于 2013-06-16T12:02:45.327 に答える
0

あなたは言った
A class having private constructor means we can create object inside the class only
が、それはあなたが自分の内ではない
ことを定義したために起こったinner Classmain(String[] args) methodTop Level Class

そうしてみると

public class A {

    class B {
        private B() {
            System.out.println("local");
        }
    }

    public static void main(String[] args) {

        B b1 = new B(); // you cant create object of inner Class B
        System.out.println("main");
    }
}

次に、内部クラス B のオブジェクトを作成できません

于 2013-06-16T12:05:32.083 に答える