In dem Buch "Core Java Volume 1", die ich lese es sagt, die Gleichheit sollte nicht mit Vererbung arbeiten. Also, ich habe folgendes Beispiel, das etwas schief geht zu haben scheint:Was ist falsch an der Verwendung der Vererbungsgleichheit in Java?
public class Main {
public static void main(String[] args) {
C c = new C("Test", 10);
D d = new D("Test", 10);
if (c.equals(d))
System.out.println("Equal");
else
System.out.println("Unequal");
if (d.equals(c))
System.out.println("Equal");
else
System.out.println("Unequal");
}
}
class C
{
C(String cstr, int cnum) {
str = cstr;
num = cnum;
}
@Override
public boolean equals(Object otherObject) {
// A quick test to see if the objects are identical.
if (this == otherObject) {
return true;
}
// Must return false if the explicit parameter is null
if (otherObject == null)
{
return false;
}
if (!(otherObject instanceof C))
return false;
// Now we know otherObject is a non-null Employee
C other = (C) otherObject;
// Test whether the fields have identical values
return str.equals(other.str) && num == other.num;
}
private String str;
private int num;
}
class D extends C {
D(String cstr, int cnum) {
super(cstr, cnum);
}
}
Es gibt „Equal“ für beide symmetrischen Vergleiche, die vermutlich sollte es nicht. Fehlt eine weitere equals
Methode in der abgeleiteten Klasse 'D'? Wenn ja, was könnte falsch mit oben genannten Beispielcode, wenn ich nicht einen anderen equals
in überhaupt abgeleitet habe?
"// Jetzt wissen wir, OtherObject ist ein Nicht-Null-Mitarbeiter" - sollte - Nun wissen wir, OtherObject ist ein Nicht-Null-Mitarbeiter oder eine Nicht-Null-Unterklasse von Employee. – Scooter