我在 ClassA 中重写了 equals()
和 hashCode()
。
ClassA {
//overridden equals() and hashCode()
}
B 类扩展了 A 类。
ClassB extends ClassA{
//....
}
现在,如果我的代码调用 classBInstance.equals(classBInstanceTwo)
,这会调用 ClassA 的 equals
方法吗?
谢谢!
最佳答案
是的,确实如此。 但这很容易破坏 equals/hashcode 契约( javadoc )。例如:
a 等于 b == b 等于 a
a 等于 b == a 等于 c == b 等于 c
因此,在 B 类中,您不应该添加要在 equals/hashcode 中使用的新字段。
一个可能的解决方案是使用 A 类作为 B 类中的字段。
在 Joshua Bloch 的《Effective Java》一书中,有一篇关于它的问题的好文章。
关于java - 重写等于父类(super class)但不等于子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10072448/