私有变量是否与私有类中的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;
}
}
}
方法测试可以同时访问name1和name2,那么,在私有类中设置private变量的目的是什么?
更新:私有关键字实际上不允许访问的代码示例很棒。
答案 0 :(得分:1)
可以在顶级封闭类中的任何位置访问私有成员,即JLS 6.6.1中定义的PublicClass
:
如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。
因此无法阻止方法访问内部类的私有成员。
由于您的内部类是私有的,您可以按照您想要的方式声明其成员(包括公开),只能在OuterClass
内访问它们。
答案 1 :(得分:0)
private
表示/允许在同一(顶级)类中进行访问。你正在使用一个内部阶级......
来自Java语言规范:
私有类成员或构造函数只能在顶级类的主体内访问(第7.6节)
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.1
因此,在这种情况下,在内部私有类中声明方法/字段私有的确没有多少用处。
如果你将InnerClass
移到PublicClass
的正文之外(可以将它保存在同一个文件中,虽然不能将这些类声明为私有),你会看到差异。