Javaではネストされたクラスと静的な内部クラスという2つの概念がありますが、これらは一体何が違うのでしょうか?
ネストされたクラス(Non-static Nested Class)
ネストされたクラスは、外部クラスのインスタンスに依存しています。つまり、ネストされたクラスのインスタンスを作成するには、外部クラスのインスタンスが既に存在している必要があります。ネストされたクラスは、外部クラスのメンバにアクセスできるため、外部クラスとの強い結びつきがあります。
public class OuterClass {
// OuterClassのメンバ
class NestedClass {
// ネストされたクラスのメンバ
}
}
静的な内部クラス(Static Nested Class)
静的な内部クラスは、外部クラスのインスタンスに依存せず、外部クラスとは独立して存在できます。静的な内部クラスは、外部クラスの非静的メンバにはアクセスできませんが、静的メンバにはアクセスできます。静的な内部クラスは、外部クラスがインスタンス化されていなくても、単独でインスタンス化できます。
public class OuterClass {
// OuterClassのメンバ
static class StaticNestedClass {
// 静的な内部クラスのメンバ
}
}
違いのまとめ
- ネストされたクラスは外部クラスのインスタンスに依存し、外部クラスの非静的メンバにアクセスできる。
- 静的な内部クラスは外部クラスのインスタンスに依存せず、外部クラスの非静的メンバにアクセスできないが、静的メンバにアクセスできる。
これらの違いを理解することで、適切な状況でどちらを使用するかを選択できるようになります。