0

私はオーバーライドequals()hashCode()、ClassAにいます。

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

ClassBはClassAを拡張します。

ClassB extends ClassA{
   //....
} 

今、私のコードがを呼び出す場合、classBInstance.equals(classBInstanceTwo)これはClassAのequalsメソッドを呼び出しますか?

ありがとう!

4

2 に答える 2

5

はい、そうです。しかし、これは equals/hashcode 契約 ( javadoc )を簡単に破ることができます。例えば:

a は b に等しい == b は a に等しい

a は b に等しい == a は c に等しい == b は c に等しい

したがって、クラス B では、equals/hashcode で使用する新しいフィールドを追加しないでください。

考えられる解決策は、クラス A をクラス B のフィールドとして使用することです。

Joshua Bloch の本「Effective Java」には、Java に関する問題についてのすばらしい記事があります。

于 2012-04-09T11:31:06.087 に答える
1

はい。Java のすべてのメソッドは、デフォルトで仮想です。

于 2012-04-09T11:25:14.323 に答える