覆盖超类中的等于但不在子类中?

use*_*403 0 java class

我已重写equals()并hashCode()在我的ClassA的.

ClassA {
   //overridden equals() and hashCode()
}
Run Code Online (Sandbox Code Playgroud)

ClassB扩展了ClassA.

ClassB extends ClassA{
   //....
} 
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

kei*_*iki 5

是的,它确实.但这很容易打破equals/hashcode契约(javadoc).例如:

a等于b == b等于a

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

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

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

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