为了账号安全,请及时绑定邮箱和手机立即绑定

重写超类的 equals 方法

重写超类的 equals 方法

繁星点点滴滴 2023-11-10 15:41:42
当我们从超类重写 equals() 方法时,需要 hashcode() 方法的新实现。equals() 和 hashcode() 之间的约定得到保留。
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

equals方法hashCode(就像任何其他方法一样)将从超类继承。

如果这些仍然适合子类,您可以保持原样。

JDK中有这样的例子:

  • Stack延伸Vector延伸AbstractList

  • Stack只是继承equalsVector

  • Vector覆盖equalsfrom AbstractList,但仅添加synchronized然后调用super.equals

  • ArrayList也扩展了AbstractList,但它覆盖了equals遵循相同逻辑的实现,但可以更有效,因为它知道至少有一个参与者是ArrayList.

但请记住

  • 您现在将使用相同的代码比较所有组合中的 Super <-> Super、Super <-> Sub、Sub <-> Sub 实例

  • 当实际上可以是子类时,类似的事情this.getClass()可能会返回意想不到的事情this

如果这会导致您的比较逻辑出现问题,则由您决定。


查看完整回答
反对 回复 2023-11-10
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

当您要在基于散列的集合中使用该类时,需要保留 equals 和 hashcode 方法之间的契约,例如 hashmap、hashset 等,它们使用 hashcode 方法来计算散列索引,并使用 equals 方法来检查相等性。否则你可以忽略哈希码。

查看完整回答
反对 回复 2023-11-10
  • 2 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信