У меня есть абстрактный класс с именем Xpto и два подкласса, которые расширяют его называли Person и Автомобиля. У меня также есть класс Тест с main() и метод foo(), который проверяет, равны ли два человека или автомобили (или любой объект класса, который расширяет Xpto). Таким образом, я переопределил equals() в классах Person и Car. Два человека равны, когда они имеют одно и то же имя, а два автомобиля равны, когда они имеют одинаковую регистрацию.Java - абстрактный класс, равен(), и два подкласса
Однако, когда я вызываю 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);
}
}
Wow мы отправили такое же решение, в то же время: P – pakore