Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 私有变量与私有类中的package/default/no修饰符变量具有相同的访问权限吗?_Java_Variables_Private - Fatal编程技术网

Java 私有变量与私有类中的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

私有变量与私有类中的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的目的是什么呢

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时生效,否则,这不重要。嗯,我什么时候说过变量彼此访问?