Javaにおける内部クラスとは何ですか?


内部クラスには、以下の4つの主要なタイプがあります:

  1. インスタンス内部クラス(Instance Inner Class): インスタンス内部クラスは、外部クラスのインスタンスと関連付けられます。そのため、インスタンス内部クラスは、外部クラスの非staticメンバーにアクセスできます。インスタンス内部クラスは、外部クラスのメソッド内で定義されることが一般的です。

  2. スタティック内部クラス(Static Inner Class): スタティック内部クラスは、外部クラスの静的メンバーとして定義されます。スタティック内部クラスは、外部クラスのインスタンスに依存せず、独立して存在します。そのため、スタティック内部クラスは、外部クラスの静的メンバーにのみアクセスできます。

  3. ローカルクラス(Local Class): ローカルクラスは、メソッド内で定義され、そのメソッドのスコープ内でのみアクセス可能です。ローカルクラスは、外部クラスのメンバーにアクセスできるだけでなく、メソッド内のローカル変数にもアクセスできます。

  4. 匿名クラス(Anonymous Class): 匿名クラスは、名前を持たず、インターフェースや抽象クラスを実装するために使用されます。匿名クラスは、通常、クラスの定義とインスタンスの作成を同時に行います。

これらの内部クラスの使い方は、コード例を通じて説明します。

インスタンス内部クラスの例:

public class OuterClass {
    private int x = 10;
    public void outerMethod() {
        InnerClass inner = new InnerClass();
        inner.innerMethod();
    }
    class InnerClass {
        public void innerMethod() {
            System.out.println("xの値: " + x);
        }
    }
}
public class Main {
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.outerMethod();
    }
}

この例では、OuterClass内にInnerClassが定義されています。InnerClassは、OuterClassのインスタンスメソッドであるouterMethod()内でインスタンス化され、xという外部クラスの非staticメンバーにアクセスしています。

これは内部クラスの基本的な使用例です。他のタイプの内部クラスについても同様にコード例を提供できます。