在java中访问其类外的私有变量

时间:2014-10-21 12:12:00

标签: java visibility

以下Java程序成功编译。 我期待声明y.className = "No class name.";中的错误 因为私有变量 className 是在其类之外访问的。

class t { 

    public static void main(String[] r) {

        Y y = new Y();

        y.className = "No class name.";

        y.echoClassName();
    }   

    static class Y { 

        private String className = "Class Name is Y."; 

        public void echoClassName() {

            System.out.println(className);
        }   
    }   
}

为什么它没有显示错误?

2 个答案:

答案 0 :(得分:8)

私有变量的范围是包含它的整个顶级类,在您的情况下t。参见例如JLS #6.6.1(强调我的):

  

否则,成员或构造函数被声明为私有,当且仅当它出现在顶层类 (第7.6节)的 中时才允许访问包含成员或构造函数的声明。

答案 1 :(得分:1)

Y是嵌套类。这意味着它被嵌入t类,你运行main。 它仅对其类可见,但如果在类中嵌套具有私有变量的类,则可以在此类中访问此变量。

如果您将Y class放在另一个文件中并在t中创建它,那么您将收到可见性错误。 由于您使用的是嵌套类,所以一切正常。