Java 内部クラス
Java 内部クラス
Java では、クラスをネストする (クラス内のクラス) ことも可能です。ネストされたクラスの目的は、同じグループに属するクラスをグループ化し、コードを読みやすく、保守しやすくすることです。
内部クラスにアクセスするには、外部クラスのオブジェクトを作成してから、内部クラスのオブジェクトを作成します。
例
class OuterClass {
int x = 10;
class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
// Outputs 15 (5 + 10)
プライベート内部クラス
「通常の」クラスとは異なり、内部クラスはprivate
またはprotected
されることができます。外部オブジェクトが内部クラスにアクセスしたくない場合は、クラスをprivate
として宣言します。
例
class OuterClass {
int x = 10;
private class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
外部クラスからプライベート内部クラスにアクセスしようとすると、エラーが発生します。
`Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();
^
静的内部クラス
内部クラスはstatic
にすることもできます。つまり、外部クラスのオブジェクトを作成せずに内部クラスにアクセスできます。
例
class OuterClass {
int x = 10;
static class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass.InnerClass myInner = new OuterClass.InnerClass();
System.out.println(myInner.y);
}
}
// Outputs 5
注: 静的属性やメソッドと同様に、静的内部クラスは外部クラスのメンバーにアクセスできません。
内部クラスから外部クラスにアクセスする
内部クラスの利点の 1 つは、外部クラスの属性とメソッドにアクセスできることです。
例
class OuterClass {
int x = 10;
class InnerClass {
public int myInnerMethod() {
return x;
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.myInnerMethod());
}
}
// Outputs 10
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。