21

Java では、内部クラスは外側のクラスのプライベート メンバーにアクセスできます。しかし、外部クラスは内部クラスのプライベート メンバーにアクセスできますか? これは、内部クラスが静的であるかどうかに関係ありません。これは正しくないと思いましたが、次のコードはコンパイルして正常に動作するようです。

public class Outer {
    class Inner {
        private int i = 0;
        private Inner() {}
    }

    public static void main(String[] args) {
        Outer o = new Outer();
        Outer.Inner oi = o.new Inner();
        oi.i = 10;
    }
}
4

1 に答える 1

26

はい、大丈夫です。JLSのセクション6.6.1から:

それ以外の場合、メンバーまたはコンストラクターが宣言さprivateれている場合、アクセスは、メンバーまたはコンストラクターの宣言を囲む最上位クラス(§7.6)の本体内で発生する場合にのみ許可されます。

トップレベルのクラスを共有している限り、別のネストされたタイプY内のネストされたタイプXのプライベートメンバーを参照することもできます。

バイトコードレベルでは、これはすべて合成パッケージアクセスメソッドを追加することで実装されていると思います。

于 2010-02-08T12:50:28.633 に答える