1. ホーム
  2. java

[解決済み] Java内部クラスと静的ネストされたクラス

2022-03-16 17:01:15

質問

Javaにおけるinner classとstatic nested classの主な違いは何ですか?どちらを選択するかは、設計と実装が関係しますか?

どのように解決するのですか?

からの 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() { ... } 静的コンテキストで定義された内部クラス であり、包含するインスタンスを持っていない。