以下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);
}
}
}
为什么它没有显示错误?
答案 0 :(得分:8)
私有变量的范围是包含它的整个顶级类,在您的情况下t
。参见例如JLS #6.6.1(强调我的):
否则,成员或构造函数被声明为私有,当且仅当它出现在顶层类 (第7.6节)的 中时才允许访问包含成员或构造函数的声明。
答案 1 :(得分:1)
Y是嵌套类。这意味着它被嵌入t类,你运行main。 它仅对其类可见,但如果在类中嵌套具有私有变量的类,则可以在此类中访问此变量。
如果您将Y class放在另一个文件中并在t中创建它,那么您将收到可见性错误。 由于您使用的是嵌套类,所以一切正常。