重写超类的 equals 方法

当我们从超类重写 equals() 方法时,需要 hashcode() 方法的新实现。equals() 和 hashcode() 之间的约定得到保留。



繁星点点滴滴
浏览 134回答 2
2回答

蝴蝶刀刀

和equals方法hashCode(就像任何其他方法一样)将从超类继承。如果这些仍然适合子类,您可以保持原样。JDK中有这样的例子:Stack延伸Vector延伸AbstractListStack只是继承equals自VectorVector覆盖equalsfrom&nbsp;AbstractList,但仅添加synchronized然后调用super.equals。ArrayList也扩展了AbstractList,但它覆盖了equals遵循相同逻辑的实现,但可以更有效,因为它知道至少有一个参与者是ArrayList.但请记住您现在将使用相同的代码比较所有组合中的 Super <-> Super、Super <-> Sub、Sub <-> Sub 实例当实际上可以是子类时,类似的事情this.getClass()可能会返回意想不到的事情this如果这会导致您的比较逻辑出现问题,则由您决定。

蛊毒传说

当您要在基于散列的集合中使用该类时,需要保留 equals 和 hashcode 方法之间的契约,例如 hashmap、hashset 等,它们使用 hashcode 方法来计算散列索引,并使用 equals 方法来检查相等性。否则你可以忽略哈希码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java