2012-04-09 16 views
0

私はClassAでequals()hashCode()をオーバーライドしました。スーパークラスではオーバーライドされますが、サブクラスではオーバーライドされませんか?

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

クラスB拡張ClassA。私のコードはclassBInstance.equals(classBInstanceTwo)を呼び出す場合

ClassB extends ClassA{ 
    //.... 
} 

さて、これはにClassAのequalsメソッドを呼び出していますか?

ありがとうございます!

+2

あなたは簡単に見つけるためのテストプログラムを作ることができます。 –

答えて

5

はいです。 これは、equals/hashcodeコントラクト(javadoc)を簡単に破ることができます。たとえば、次のように

のb == bは

、B == AはCの== bは、新しいフィールドを追加するべきではないクラスB中のSO C

に等しい等しい等しいと等しい等しくequals/hashcodeで使用します。

可能な解決策は、それとの問題についての素晴らしい記事があるジョシュア・ブロックの著書効果的なJavaでは、クラスB

にフィールドとしてクラスAを使用することです。

1

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

+0

静的メソッドを除きます。それは火曜日にはまあまあです。 –

+0

(コンストラクタメソッドもちょっと変わっています) –

+0

より正確な定義をくれてありがとう! ;)たぶんあなたは春のような専門家ですか?私は非常に奇妙な基本的な認証の動作について未解決の質問があります。あなたが助けてくれれば素晴らしいだろう) – artplastika