2

私有变量是否与私有类中的包/默认/无修饰符变量具有相同的访问权限?

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 的目的是什么?

更新:private 关键字实际上如何禁止访问的代码示例会很棒。

4

2 回答 2

1

私有成员可以在顶级封闭类中的任何地方访问,即PublicClassJLS 6.6.1中定义:

如果成员或构造函数被声明为私有,则当且仅当它出现在包含成员或构造函数声明的顶级类(第 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 回答