内部クラスには、以下の4つの主要なタイプがあります:
-
インスタンス内部クラス(Instance Inner Class): インスタンス内部クラスは、外部クラスのインスタンスと関連付けられます。そのため、インスタンス内部クラスは、外部クラスの非staticメンバーにアクセスできます。インスタンス内部クラスは、外部クラスのメソッド内で定義されることが一般的です。
-
スタティック内部クラス(Static Inner Class): スタティック内部クラスは、外部クラスの静的メンバーとして定義されます。スタティック内部クラスは、外部クラスのインスタンスに依存せず、独立して存在します。そのため、スタティック内部クラスは、外部クラスの静的メンバーにのみアクセスできます。
-
ローカルクラス(Local Class): ローカルクラスは、メソッド内で定義され、そのメソッドのスコープ内でのみアクセス可能です。ローカルクラスは、外部クラスのメンバーにアクセスできるだけでなく、メソッド内のローカル変数にもアクセスできます。
-
匿名クラス(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メンバーにアクセスしています。
これは内部クラスの基本的な使用例です。他のタイプの内部クラスについても同様にコード例を提供できます。