2

プライベート変数は、プライベート クラスの package/default/no modifier 変数と同じアクセス権を持っていますか?

public class PublicClass {

    public void test() {

        InnerClass in = new InnerClass();

        in.name1 = "a";
        in.name2 = "b";

        in.getName1();
        in.getName2();

    }

    private class InnerClass {

        private String name1;
        String name2;

        private String getName1() {
            return name1;
        }

        String getName2() {
            return name2;
        }

    }

}

メソッド test は name1 と name2 の両方にアクセスできますが、プライベート クラスの変数にプライベートを設定する目的は何でしょうか?

更新: private キーワードが実際にアクセスを拒否するコード例は素晴らしいでしょう。

4

2 に答える 2

1

プライベート メンバーは、最上位のエンクロージング クラス内のどこからでもアクセスできます。つまり、 JLS 6.6.1PublicClassで定義されているとおりです。

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

したがって、メソッドが内部クラスのプライベート メンバーにアクセスするのを防ぐ方法はありません。

内部クラスはプライベートであるため、そのメンバーを好きなように宣言できます (パブリックを含む)。それらは 内でのみアクセスできますOuterClass

于 2012-05-14T15:48:51.910 に答える
0

private同じ(トップレベル)クラス内でのアクセスを意味/許可します。内部クラスを使用しています...

Java 言語仕様から:

プライベート クラス メンバーまたはコンストラクターは、トップ レベル クラスの本体内でのみアクセス可能です (§7.6)。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.1

したがって、この場合、内部プライベート クラスでメソッド/フィールドをプライベートに宣言することはあまり使用されません。InnerClassの本体の外側に移動するPublicClassと(クラスをプライベートに宣言することはできませんが、同じファイルに含めることができます)、違いがわかります。

于 2012-05-14T15:58:48.617 に答える