Java の内部クラスと静的ネストクラスの主な違いは何ですか? 設計/実装は、これらのいずれかを選択する際に役割を果たしますか?
ベストアンサー1
からJavaチュートリアル:
ネストされたクラスは、静的クラスと非静的クラスという 2 つのカテゴリに分けられます。静的クラスとして宣言されたネストされたクラスは、単に静的ネストされたクラスと呼ばれます。非静的ネストされたクラスは、内部クラスと呼ばれます。
静的ネストされたクラスには、囲んでいるクラス名を使用してアクセスします。
OuterClass.StaticNestedClass
たとえば、静的ネストされたクラスのオブジェクトを作成するには、次の構文を使用します。
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
内部クラスのインスタンスであるオブジェクトは、外部クラスのインスタンス内に存在します。次のクラスを検討してください。
class OuterClass {
...
class InnerClass {
...
}
}
InnerClass のインスタンスは OuterClass のインスタンス内にのみ存在でき、それを囲むインスタンスのメソッドとフィールドに直接アクセスできます。
内部クラスをインスタンス化するには、まず外部クラスをインスタンス化する必要があります。次に、次の構文を使用して、外部オブジェクト内に内部オブジェクトを作成します。
OuterClass outerObject = new OuterClass()
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
完全を期すために、次のようなものもあることに注意しましょう。囲むインスタンスのない内部クラス:
class A {
int t() { return 1; }
static A a = new A() { int t() { return 2; } };
}
ここで、 は静的コンテキストで定義された内部クラスnew A() { ... }
であり、囲むインスタンスはありません。