私有变量是否与私有类中的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中访问它们。

10-08 01:49