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
注:static
属性やメソッドと同様に、static
内部クラスは外部クラスのメンバーにアクセスできません。
内部クラスから外部クラスにアクセスする
内部クラスの利点の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