外部クラスが内部クラスのプライベート インスタンス変数にアクセスできることに気づきました。これはどのように可能でしょうか? 以下は同じことを示すサンプル コードです。
class ABC{
class XYZ{
private int x=10;
}
public static void main(String... args){
ABC.XYZ xx = new ABC().new XYZ();
System.out.println("Hello :: "+xx.x); ///Why is this allowed??
}
}
なぜこのような行為が許されるのでしょうか?
ベストアンサー1
内部クラスは、実際には元の外部クラスに属する一部の機能をきれいに分離するための手段にすぎません。内部クラスは、次の 2 つの要件がある場合に使用することを目的としています。
- 外部クラスの一部の機能は、別のクラスに実装すると最も明確になります。
- 別のクラスであっても、その機能は外部クラスの動作と密接に結びついています。
これらの要件を考慮すると、内部クラスは外部クラスに完全にアクセスできます。内部クラスは基本的に外部クラスのメンバーであるため、外部クラスのメソッドと属性 (プライベートを含む) にアクセスできるのは当然です。