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

时间:2012-04-09 11:21:09

标签: java class

我在ClassA中覆盖了equals()hashCode()

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

ClassB扩展了ClassA。

ClassB extends ClassA{
   //....
} 

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

谢谢!

2 个答案:

答案 0 :(得分:5)

是的。 但这很容易打破equals / hashcode契约(javadoc)。例如:

a等于b == b等于a

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

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

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

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

答案 1 :(得分:1)

是。默认情况下,Java中的所有方法都是虚拟的。