2012-04-09 14 views
0

Ich habe equals() und hashCode() in meiner ClassA überschrieben.überschreiben gleich in Superklasse, aber nicht in Unterklasse?

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

ClassB KlasseA erstreckt.

ClassB extends ClassA{ 
    //.... 
} 

Nun, wenn mein Code classBInstance.equals(classBInstanceTwo) ruft, ruft diese equals Methode der Klasse A?

Danke!

+2

Sie könnten leicht ein Testprogramm erstellen, um herauszufinden. –

Antwort

5

Ja, tut es. Aber das kann den equals/hashcode-Vertrag (javadoc) leicht brechen. Zum Beispiel:

a gleich b == b a a b gleich

gleich == a gleich c == b gleich c

So in der Klasse B sollten Sie neue Felder nicht hinzufügen, die Sie möchten in Equals/Hashcode verwenden.

Eine mögliche Lösung ist die Klasse A als ein Feld in der Klasse B.

Im Buch Effective Java von Joshua Bloch zu verwenden, gibt es einen schönen Artikel über die Probleme mit ihm ist.

1

Ja. Alle Methoden in Java sind standardmäßig virtuell.

+0

Außer statischen Methoden. Das ist dienstags quasi virtuell. –

+0

(Und Konstruktor-Methoden verhalten sich auch ein bisschen seltsam.) –

+0

Danke für genauere Definitionen! ;) Vielleicht bist du im Frühling so ein Experte? Ich habe eine offene Frage über sehr seltsame grundlegende Auth-Verhalten. Wäre toll wenn du helfen würdest) – artplastika

Verwandte Themen