Java 内部クラスと静的ネストクラス 質問する

Java 内部クラスと静的ネストクラス 質問する

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();

見る:Java チュートリアル - ネストされたクラス

完全を期すために、次のようなものもあることに注意しましょう。囲むインスタンスのない内部クラス:

class A {
  int t() { return 1; }
  static A a =  new A() { int t() { return 2; } };
}

ここで、 は静的コンテキストで定義された内部クラスnew A() { ... }であり、囲むインスタンスはありません。

おすすめ記事