Java 私有变量与私有类中的package/default/no修饰符变量具有相同的访问权限吗?
私有变量与私有类中的package/default/no修饰符变量具有相同的访问权限吗Java 私有变量与私有类中的package/default/no修饰符变量具有相同的访问权限吗?,java,variables,private,Java,Variables,Private,私有变量与私有类中的package/default/no修饰符变量具有相同的访问权限吗 public class PublicClass { public void test() { InnerClass in = new InnerClass(); in.name1 = "a"; in.name2 = "b"; in.getName1(); in.getName2(); } pr
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的目的是什么呢
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;
}
}
}
更新:一个关于private关键字如何实际禁止访问的代码示例将非常有用。private成员可以在顶级封闭类中的任何位置访问,即
PublicClass
,定义如下:
如果该成员或构造函数被声明为私有,则仅当且仅当该成员或构造函数的声明发生在顶级类(§7.6)的主体内时,才允许访问
因此,无法阻止方法访问内部类的私有成员
由于您的内部类是私有的,您可以按照您想要的方式(包括public)声明其成员,因此只能在
OuterClass
中访问它们private
表示/允许在同一(顶级)类中访问它们。您正在使用一个内部类
根据Java语言规范:
私有类成员或构造函数只能在顶级类的主体中访问(§7.6)
因此,在这种情况下,在内部私有类中声明私有的方法/字段并没有多大用处。
如果将
InnerClass
移到PublicClass
的主体之外(仍然可以将其放在同一个文件中,尽管不能声明类的私有),您将看到不同之处。变量彼此不访问。方法访问字段,无论您使用哪个变量或字段访问另一个类的字段或方法。内部类的变量访问修饰符主要在内部类为public/package private时生效,否则,这不重要。嗯,我什么时候说过变量彼此访问?