这是我的先生的代码,你能解释为什么他使用了覆盖方法吗?它只有一个我复制粘贴的课程,请解释一下。
package vehicle;
enum carType{LUXURY,ELECTRIC,SPORTS}
public abstract class Car implements Comparable<Car> {
private int carId;
private carType type;
private float price;
private String model;
public Car(int carId, carType type, float price, String model) {
this.carId = carId;
this.type = type;
this.price = price;
this.model = model;
}
public int getCarId() {
return carId;
}
public float getPrice() {
return price;
}
@Override
public String toString() {
return "Car{" + "carId=" + carId + ", type=" + type + ", price=" + price + ", model=" +
model + '}';
}
public boolean equals(Object obj)
{
if(obj instanceof Car)
{
Car c = (Car)obj;
if(c.carId==carId)
return true;
}
return false;
}
@Override
public int compareTo(Car o) {
if(carId>o.carId)
return 1;
else if (carId<o.carId)
return -1;
else
return 0;
}
public abstract void display();
答案 0 :(得分:0)
我也是学生,所以我的解释可能不那么紧,但我想:
这部分被重写,因为有一个BUILT-IN ToString()方法,所以通过使用@Override,他告诉程序当调用toString()时,他应该使用你创建的那个。
@Override
public String toString() {
return "Car{" + "carId=" + carId + ", type=" + type + ", price=" + price + ", model=" +
model + '}';
}
这里我们覆盖了BUILT-IN方法中也提供的EQUALS方法,因此当你与对象进行比较时,程序会知道使用THAT PARTICULAR方法(你所写的方法)。
public boolean equals(Object obj)
{
if(obj instanceof Car)
{
Car c = (Car)obj;
if(c.carId==carId)
return true;
}
return false;
}
同样的原因
@Override
public int compareTo(Car o) {
if(carId>o.carId)
return 1;
else if (carId<o.carId)
return -1;
else
return 0;
}