私有变量是否与私有类中的package / default / no修饰符变量具有相同的访问权限?
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关键字实际上如何禁止访问。
最佳答案
私有成员可以在顶级封闭类(即JLS 6.6.1中定义的PublicClass
)中的任何位置访问:
如果成员或构造函数被声明为私有,则仅当访问发生在封装成员或构造函数的声明的顶级类(第7.6节)的主体内时,才允许访问。
因此,无法阻止方法访问内部类的私有成员。
由于您的内部类是私有的,因此您可以以所需的方式声明其成员(包括公共),因此只能在OuterClass
中访问它们。