someObj.java
public class someObj {
private int data;
someObj(int initVal) {
data = initVal;
}
int getAnotherObjectData(someObj bar) {
return bar.data;
}
}
someObj foo = new someObj(30);
someObj bar = new someObj(40);
System.out.println(bar.getAnotherObjectData(foo));
结果,我可以得到'30'。 为什么我可以访问另一个Object的私有变量数据?
答案 0 :(得分:2)
由于它是同一个类实现,这意味着你自己编写这个类,所以你可以100%控制它。因此,如果您也可以访问相同类型的其他对象,那么这不是问题。在实施equals
或clone
方法时,此功能非常有用:
public class MyObj {
private int a;
private long b;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyObj other = (MyObj) obj;
if (a != other.a)
return false;
if (b != other.b)
return false;
return true;
}
}
如果没有适当的equals
实现的字段访问权限,您需要为所有字段设置非私有getter,这在许多情况下可能是不可取的。