Xptoという名前の抽象クラスと、 PersonおよびCarという名前のそれを拡張する 2 つのサブクラスがあります。また、main() を持つTestという名前のクラスと、2 人の人物または車 (または Xpto を拡張するクラスの任意のオブジェクト) が等しいかどうかを検証するメソッドfoo()があります。したがって、Person クラスと Car クラスの両方でequals()を再定義しました。2 人が同じ名前を持っていれば対等であり、2 台の車が同じ登録をしていれば対等です。
ただし、Test クラスで foo() を呼び出すと、常に「false」になります。理由は理解できます: equals() は Xpto 抽象クラスで再定義されていません。では、その foo() メソッドで 2 人の人物または車 (または Xpto を拡張するクラスの任意のオブジェクト) を比較するにはどうすればよいでしょうか?
要約すると、これは私が持っているコードです:
public abstract class Xpto {
}
public class Person extends Xpto{
protected String name;
public Person(String name){
this.name = name;
}
public boolean equals(Person p){
System.out.println("Person equals()?");
return this.name.compareTo(p.name) == 0 ? true : false;
}
}
public class Car extends Xpto{
protected String registration;
public Car(String registration){
this.registration = registration;
}
public boolean equals(Car car){
System.out.println("Car equals()?");
return this.registration.compareTo(car.registration) == 0 ? true : false;
}
}
public class Teste {
public static void foo(Xpto xpto1, Xpto xpto2){
if(xpto1.equals(xpto2))
System.out.println("xpto1.equals(xpto2) -> true");
else
System.out.println("xpto1.equals(xpto2) -> false");
}
public static void main(String argv[]){
Car c1 = new Car("ABC");
Car c2 = new Car("DEF");
Person p1 = new Person("Manel");
Person p2 = new Person("Manel");
foo(p1,p2);
}
}