当我们从超类重写 equals() 方法时,需要 hashcode() 方法的新实现。equals() 和 hashcode() 之间的约定得到保留。
2 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
和equals
方法hashCode
(就像任何其他方法一样)将从超类继承。
如果这些仍然适合子类,您可以保持原样。
JDK中有这样的例子:
Stack
延伸Vector
延伸AbstractList
Stack
只是继承equals
自Vector
Vector
覆盖equals
fromAbstractList
,但仅添加synchronized
然后调用super.equals
。ArrayList
也扩展了AbstractList
,但它覆盖了equals
遵循相同逻辑的实现,但可以更有效,因为它知道至少有一个参与者是ArrayList
.
但请记住
您现在将使用相同的代码比较所有组合中的 Super <-> Super、Super <-> Sub、Sub <-> Sub 实例
当实际上可以是子类时,类似的事情
this.getClass()
可能会返回意想不到的事情this
如果这会导致您的比较逻辑出现问题,则由您决定。
蛊毒传说
TA贡献1895条经验 获得超3个赞
当您要在基于散列的集合中使用该类时,需要保留 equals 和 hashcode 方法之间的契约,例如 hashmap、hashset 等,它们使用 hashcode 方法来计算散列索引,并使用 equals 方法来检查相等性。否则你可以忽略哈希码。
添加回答
举报
0/150
提交
取消