1

内部クラスのインスタンスを作成する方法を知っています。しかし、次の方法でそれができない理由を知りたいです。

class outerclass{

      public static void main(String[] args){
              innerclass in=new innerclass();
      }

      class innerclass{


      }

}

これを行うと、次のエラーが発生します。

No enclosing instance of type outerclass is accessible. Must qualify the allocation with an enclosing instance of type outerclass (e.g. x.new A() where x is an instance of outerclass).

なんで?

4

4 に答える 4

3
class Demo{

    public static void main(String[] args){
            System.out.println(innerclass.a);

    }

    static class innerclass{
            static int a=1;

    }


}

出力 1 を与えます。

内部クラスを static として作成している場合は、こちらを参照してください。外部クラスで簡単にアクセスできます。ネストされたクラスのインスタンスを作成するには、次のように外部クラス名を前に付けて参照する必要があります。

Outer.Nested instance = new Outer.Nested();

非静的ネスト クラス (内部クラス) Java の非静的ネスト クラスは、内部クラスとも呼ばれます。内部クラスは、外側のクラスのインスタンスに関連付けられています。したがって、内部クラスのインスタンスを作成するには、最初に外側のクラスのインスタンスを作成する必要があります。内部クラス定義の例を次に示します。

public class Outer {

  public class Inner {
  }

}

Inner クラスのインスタンスを作成する方法は次のとおりです。

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();

内部クラスのインスタンスを作成するために、外部クラスへの参照の後に new を配置する方法に注意してください。

ネストされた非静的クラス (内部クラス) は、private と宣言されていても、外側のクラスのフィールドにアクセスできます。その例を次に示します。

public class Outer {

    private String text = "I am private!";

    public class Inner {

        public void printText() {
            System.out.println(text);
        }
    }
}
于 2016-09-05T10:33:26.140 に答える
1

あなたinnerclassは静的ではありません。これは、外部クラスへの参照が必要であることを意味します。 main静的であり、暗黙の外部クラスはありません。

簡単な解決策は、内部クラスを静的なネストされたクラスにすることです。

于 2016-09-05T10:14:19.970 に答える
0

内部クラスを静的にするか (前述のとおり)、非静的コンテキスト (非静的メソッドなど) から内部クラスを作成する必要があります。

つまり、次のいずれかです。

class outerclass{
  void myMethod() {
      innerclass in = new innerclass();
  }
  class innerclass{
  }
}

またはこれ

class outerclass{
      public static void main(String[] args){
           innerclass in=new innerclass();
      }
      static class innerclass{
      }
}
于 2016-09-05T10:20:54.930 に答える
0

outerclassthats encapsulatesはインスタンス化されていないため、 attachがないinnerclassため、直接呼び出すとinnerclassエラーがスローされます。outerclassinnerclass

したがって、以前の回答で示唆されているように、innerclass静的にすることで問題が解決し、innerclassインスタンス化せずにアクセスできるようになります。

このトピックに関しては、多くの既存の回答があります。簡単なグーグルはこれをもたらします。

Java - Foo 型の囲んでいるインスタンスにアクセスできません

于 2016-09-05T10:34:06.300 に答える