gpt4 book ai didi

java - 在不同包的子类中使用 super() 作为 equals()

转载 作者:行者123 更新时间:2023-12-02 07:17:15 24 4
gpt4 key购买 nike

我有一个位于包 A 中的类 Vehicle 和一个位于包 B 中的类 Car,我想使用 equals 方法并通过使用 super() 来利用继承,但我不知道该怎么做。

当我尝试在 main 中运行该文件时,我得到以下信息:

Exception in thread "main" java.lang.NullPointerException
at vehicle.Vehicle.equals(Vehicle.java:97)
at car.Car.equals(Car.java:104)
at Main.main(Main.java:48)

这是代码:

public boolean equals(Vehicle other) {
if (this.type.equals(other.type)) {
if (this.year == other.year && this.price == other.price) {
return true;
} else {
return false;
}
} else {
return false;
}
}
//equals in Car
public boolean equals(Car other) {
if (this.type.equals(other.type)) {
if (this.speed == other.speed && this.door == other.door) {
if (super.equals(other)) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}

最佳答案

equals() 方法,按照the contractnull 作为参数传递时,应该返回 false:

For any non-null reference value x, x.equals(null) should return false.

将其添加到每个 equals() 方法的开头:

if(other == null) {
return false;
}

其次,您必须重写equals(),而不是重载它:

public boolean equals(Object other)

最后,您需要 instanceof 和向下转型才能使这一切正常工作。

顺便说一句:

if (this.speed == other.speed && this.door == other.door)
{
if(super.equals(other))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}

相当于:

if (this.speed == other.speed && this.door == other.door)
{
return super.equals(other);
}
else
{
return false;
}

这又可以简化为:

return this.speed == other.speed && this.door == other.door && super.equals(other);

关于java - 在不同包的子类中使用 super() 作为 equals(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791945/

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