为什么我可以在我的equals(Object o)方法中直接访问“other”对象的私有变量

时间:2009-10-17 05:17:14

标签: java protection

在Java中的equals(Object o)方法中,我可以访问传入对象的私有变量,而无需通过其公共getter。

public boolean equals(Object o){
    ...
    MyObject other = (MyObject)o;
    return getProp() == other.prop; 
}

怎么样?

2 个答案:

答案 0 :(得分:50)

私有数据可由该类的任何实例访问,即使A类的一个实例正在访问另一个A实例的私有成员。重要的是要记住该访问修饰符(私有, protected,public)控制访问权限,而不是实例访问权限。

答案 1 :(得分:2)

可能的答案是,可见性模型的设计者认为在类中工作的任何开发人员都必须掌握整个类的实现。

但这是一个坏主意。这鼓励了不良做法。访问类PersonPerson字段的开发人员不必知道整个类的实现。好的做法是使用访问器,而不必知道访问器的操作。