gpt4 book ai didi

Java - 抽象类、equals() 和两个子类

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:43:36 26 4
gpt4 key购买 nike

我有一个名为Xpto 的抽象类和两个扩展它的子类PersonCar。我还有一个名为 Test 的类,带有 main() 和一个方法 foo() 来验证两个人或汽车(或扩展 Xpto 的类的任何对象)是否等于。因此,我在 Person 和 Car 类中重新定义了 equals()。两个人同名是平等的,两车同号也是平等的。

但是,当我在测试类中调用 foo() 时,我总是得到“false”。我明白为什么:equals() 没有在 Xpto 抽象类中重新定义。那么...如何在 foo() 方法中比较两个人或汽车(或扩展 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);
}
}

最佳答案

正如其他人所说,您重写的方法的签名必须完全相同。覆盖方法时,为确保您正在覆盖,请在函数上方使用 @Override 注释,这样如果您更改了方法,像 Eclipse 这样的 IDE 会警告您。

这是它的样子:

@Override
public boolean equals(Object obj){
...Your code here...
}

我建议也重写 hashCode(),因为在将项目插入列表、集合、hastables 等时...为了相等(和执行)hashCode() 被使用(有时 equals() 不是!)

所以你的最终代码是:

@Override
public boolean equals(Object obj){
...Your code here...
}

@Override
public int hashCode(){
...Your code here...
}

更多信息请访问 javadoc

关于Java - 抽象类、equals() 和两个子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2698419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com