2012-04-09 75 views
0

我在ClassA中覆蓋equals()hashCode()在超類中覆蓋等於但不在子類中?

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

ClassB擴展了ClassA。

ClassB extends ClassA{ 
    //.... 
} 

現在,如果我的代碼調用classBInstance.equals(classBInstanceTwo),這是否調用ClassA的的equals方法?

謝謝!

+2

你可以很容易地做一個測試程序找出來。 – 2012-04-09 11:22:47

回答

5

是的。 但是這很容易破壞等號/散列碼合約(javadoc)。例如:

一個等於B == b等於一個

一個等於B ==一等於C == b等於c^

所以在B類,你不應該增加新的領域,其中你想在equals/hashcode中使用。

一個可能的解決方案是在B類

使用類作爲一個領域在這本書中有效的Java約書亞·布洛克的有關於它的問題的好文章。

1

是的。 Java中的所有方法默認都是虛擬的。

+0

除靜態方法外。這是週二虛擬。 – 2012-04-09 11:25:56

+0

(構造函數方法也有點奇怪。) – 2012-04-09 11:30:53

+0

感謝您提供更準確的定義! ;)也許你在春天是如此的專家?我有一個關於非常奇怪的基本認證行爲的問題。如果你有幫助,會很棒) – artplastika 2012-04-09 11:37:35