1. ホーム
  2. java

[解決済み] なぜ外側のJavaクラスは内側のクラスのプライベート・メンバにアクセスできるのですか?

2022-04-13 17:10:42

質問

外部クラスが内部クラスのプライベートインスタンス変数にアクセスできることを確認しました。これはどのようにして可能なのでしょうか?以下は、それを示すサンプルコードです。

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??
    }
}

なぜこのような動作が許されるのでしょうか?

解決方法は?

インナークラスは、本来アウタークラスに属する機能をきれいに分離するための手段に過ぎません。 これらは、2つの要件がある場合に使用されることを意図しています。

  1. 外側のクラスの機能の一部は、別のクラスで実装された場合、最も明確になります。
  2. 別のクラスであっても、その機能は外側のクラスの動作と非常に密接に結びついています。

これらの要件を満たすために、内部クラスは外部クラスへのフルアクセスを持ちます。 内部クラスは基本的に外部クラスのメンバーなので、外部クラスのメソッドや属性(非公開も含む)にアクセスできるのは理にかなっています。