当我们从父类(super class)重写 equals() 方法时,需要 hashcode() 方法的新实现。 equals() 和 hashcode() 之间的约定得到保留。
最佳答案
equals
和 hashCode
方法将从父类(super class)继承(就像任何其他方法一样)。
如果这些仍然适合子类,您可以保持原样。
JDK 中有相关示例:
Stack
扩展Vector
扩展AbstractList
Stack
只是从Vector
继承equals
Vector
覆盖AbstractList
中的equals
,但仅添加synchronized
,然后仅调用super .等于
.ArrayList
也扩展了AbstractList
,但它使用遵循相同逻辑的实现覆盖了equals
,但可以更高效,因为它知道至少有一个参与者是ArrayList
。
但请记住
- 您现在将使用相同的代码比较所有组合中的 Super <-> Super、Super <-> Sub、Sub <-> Sub 实例
- 当
this
实际上可以是子类时,诸如this.getClass()
之类的内容可能会返回意外的结果
如果这会导致您的比较逻辑出现问题,则由您决定。
关于java - 重写父类(super class)的 equals 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58461837/