我在ClassA中覆盖了equals()
和hashCode()
。
ClassA {
//overridden equals() and hashCode()
}
ClassB扩展了ClassA。
ClassB extends ClassA{
//....
}
现在,如果我的代码调用classBInstance.equals(classBInstanceTwo)
,这会调用ClassA的equals
方法吗?
谢谢!
答案 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中的所有方法都是虚拟的。