0
public class MyClass {
public int myclassMember=NestedClass.nestedclassMember; //Compiler error,static reference to a non-static field

    public static class NestedClass {
        public int nestedclassMember=myclassMember; //Compiler error,static reference to a non-static field.
        public NestedClass() {
       }
    }

}

しかし同時に、もちろんコンパイル時のエラーを削除した後、以下は完全に合法です-:

MyClass.NestedClass nestedInstance= new MyClass.NestedClass();

クラスが同時に静的と非静的の両方になるにはどうすればよいですか?

4

1 に答える 1

5

staticこのコンテキストでは、フィールドやメソッドの意味と同じ意味ではありません。

ネストされた静的クラスは、外部クラス インスタンスを作成する必要がないクラスです。

ネストされた非静的クラスは、外部クラスのインスタンスを作成する必要があり、このインスタンスへの暗黙的な参照を持っています (TheNameOfTheOuterClass.this内部クラス内で使用できます)。

静的内部クラスは通常、クラスが 1 つのクラスによってのみ使用される場合にクラスを外部に公開することを避けるために、またはクラスが外部クラスのプライベート フィールドおよびメソッドにアクセスできるようにするために、またはクラスを別のクラスにスコープするために使用されます。と密接に結びついているからです。

于 2012-11-18T21:41:32.723 に答える