java - 重写父类(super class)的 equals 方法

标签 java oop

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

最佳答案

equalshashCode 方法将从父类(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/

相关文章:

oop - tomcat 中不同文件夹级别的两个 log4j 库

c# - 为什么抽象类可以有构造函数?

php - 管理一个应用的多个专业版本的最佳实践

JavaScript:全局对象还是函数返回本地?

java - 是否可以在 Android 上使用带有 BluetoothSocket 的 SocketChannel

java - 如何在没有字符串方法的情况下隔离第一个和第二个数字(java 学校项目)

Java - 添加所有奇数奇怪的行为

java - 具有泛型的构建器

java - spring security - 身份验证中的sessionId为空

java - derby 中的复杂 LIKE 表达式 (Java DB)