方法不会重写或实现超类型@override编译错误中的方法



我收到错误method does not override or implement a method from a supertype @Override.我想在打印一辆车后打印"无法更改汽车的容量"。我需要覆盖setCapacity来打印另一部分。我相信代码大部分是正确的,只是不确定为什么它没有正确覆盖setCapacity方法。最终输出为:

New capacity = 1600
Vehicle Info:
capacity = 1600cc
make = Mazda
Cannot change capacity of a car
Vehicle Info:
capacity = 1200cc
make = Holden
type = sedan
model = Barina

我的代码是:

class Vehicle {  // base class
public void setCapacity(int setCapacity) {
this.capacity = setCapacity;
System.out.println("New Capacity = " + setCapacity);
}
int capacity;
String make;
Vehicle(int theCapacity, String theMake) {
capacity = theCapacity;
make = theMake;
}
void print() {
System.out.println("Vehicle Info:");
System.out.println("  capacity = " + capacity + "cc" );
System.out.println("  make = " + make );
}
}
class Car extends Vehicle {
public String type;
public String model;
public Car(int theCapacity, String theMake, String theType, String theModel) {
super(theCapacity, theMake);
type = theType;
model = theModel;
}
@Override
public void print() {
super.print();
System.out.println("  type = " + type);
System.out.println("  model = " + model);
}
@Override
public void setCapacity() {
super.print();
System.out.println("Cannot change capacity of a car");
}       
}
class Task3 {
public static void main (String[]args){
Car car1 = new Car (1200,"Holden","sedan","Barina" );
Vehicle v1 = new Vehicle (1500,"Mazda");
v1.setCapacity(1600);
v1.print();
car1.setCapacity(1600);
car1.print();
}
}

setCapacity()的孩子和父母的方法签名不匹配。如果要重写子类中父类的方法,则它必须具有相同的签名。

改变

public void setCapacity() { //... }

public void setCapacity(int setCapacity) { // ... }

Car类。

在您的代码中,您错过了参数setCapacity,因此编译器会抱怨。

createCapacity 的签名在车辆和汽车类中是不同的。因此,存在编译错误。在车辆类中,您有一个参数集容量,但在汽车类中,该方法的参数列表为空。因此,无法覆盖。

@Override
public void setCapacity(   int capacity   ) { --> **adding this argument here will fix the issue.**
super.print();
System.out.println("Cannot change capacity of a car");
}
public void setCapacity(int setCapacity) {
this.capacity = setCapacity;
System.out.println("New Capacity = " + setCapacity);
}

void setCapacity(int setCapacity)不会被覆盖。void setCapacity()void setCapacity(int setCapacity)是两种不同的方法。因此生成编译错误@Override注释。

关于术语,在这种情况下,setCapacity据说是重载的。

最新更新