假设我有一个班级
class Key {
public boolean equals(Object o) {
Key k = (Key)o;
return i == k.i;
}
private int i;
}
我想知道为什么在equals方法中我因为它是私有的而没有得到关于访问k.i的错误?
答案 0 :(得分:14)
您正在访问同一班级的成员。成员可见性规则适用于类,而不适用于类的对象。
为了进一步扩展,Java编译器(在编译时)和Java虚拟机(在运行时)通过首先查看它的类型来应用对象的可见性规则。
当必须为字段访问,方法调用和类似表达式生成字节代码时,编译器会执行此活动。访问规则基于对象的限定类型而不是单独的对象来应用。编译器的行为由Java语言规范定义。
Java虚拟机在链接过程中使用语言规范定义的相同规则执行此活动,并由虚拟机规范明确定义。
答案 1 :(得分:3)
你不应该这样做。私有成员的通常定义是它可以被同一个类的任何其他实例访问。
答案 2 :(得分:2)
“私有”成员可以在同一个文件中访问(相同的类,嵌套的静态和非静态类)。
(当然,嵌套的静态类需要对封闭类进行显式引用才能访问私有成员。)