java - 重写等于父类(super class)但不等于子类?

标签 java class

我在 ClassA 中重写了 equals()hashCode()

ClassA {
   //overridden equals() and hashCode()
}

B 类扩展了 A 类。

ClassB extends ClassA{
   //....
} 

现在,如果我的代码调用 classBInstance.equals(classBInstanceTwo),这会调用 ClassA 的 equals 方法吗?

谢谢!

最佳答案

是的,确实如此。 但这很容易破坏 equals/hashcode 契约( javadoc )。例如:

a 等于 b == b 等于 a

a 等于 b == a 等于 c == b 等于 c

因此,在 B 类中,您不应该添加要在 equals/hashcode 中使用的新字段。

一个可能的解决方案是使用 A 类作为 B 类中的字段。

在 Joshua Bloch 的《Effective Java》一书中,有一篇关于它的问题的好文章。

关于java - 重写等于父类(super class)但不等于子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10072448/

相关文章:

java - 检查 2 个数字是否在彼此的 1% 以内

class - Spring Boot 1.4 中不推荐使用 ErrorPage 类

C++ 类成员和延迟初始化

c++ - C++ 纯虚拟类是否需要定义?

python - 对一个对象执行某些操作会对同一类的所有对象执行相同的操作吗?

java - 我什么时候知道像素之间出现了新的显着颜色变化?

具有类和嵌套静态接口(interface)的 Java 泛型

java - 有没有办法强制类加载器加载一个包,即使它的类都没有被加载?

java - 解析 JSON 字符串时出现问题

java - 如何在 Java 中使用 String.format()?