У меня есть абстрактный класс с именем Xpto и два расширяющих его подкласса с именами Person и Car. У меня также есть класс с именем Test с функцией main() и методом foo(), который проверяет, являются ли два человека или машины (или любой объект класса, расширяющего Xpto). равно. Таким образом, я переопределил equals() в классах Person и Car. Два человека равны, если у них одно и то же имя, и два автомобиля равны, если у них одинаковая регистрация.
Однако, когда я вызываю foo() в классе Test, я всегда получаю "false". Я понимаю, почему: equals() не переопределяется в абстрактном классе Xpto. Итак... как я могу сравнить двух людей или автомобили (или любой объект класса, расширяющего Xpto) в этом методе foo()?
В общем, это код, который у меня есть:
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);
}
}