私有变量是否与私有类中的package / default / no修饰符变量具有相同的访问权限?

时间:2012-05-14 15:46:17

标签: 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();

    }

    private class InnerClass {

        private String name1;
        String name2;

        private String getName1() {
            return name1;
        }

        String getName2() {
            return name2;
        }

    }

}

方法测试可以同时访问name1和name2,那么,在私有类中设置private变量的目的是什么?

更新:私有关键字实际上不允许访问的代码示例很棒。

2 个答案:

答案 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的正文之外(可以将它保存在同一个文件中,虽然不能将这些类声明为私有),你会看到差异。