错误:"<Class> is not abstract and does not override abstract method <method>"



错误:

java:com.company.Bicycle 不是抽象的,不会覆盖 com.company.Vehicle 中的抽象方法 applyBreakes(int(,对于 Bike 类也是如此。

package com.company;
interface Vehicle {
//all are the abstract method.
void changeGear(int a);
void speedUp(int a);
void applyBreakes(int a);
}

class Bicycle implements Vehicle {
int speed;
int gear;
//to change speed
@Override
public void changeGear(int newGear) {
gear = newGear;
}
//to increase speed
@Override
public void speedUp(int increment) {
speed = speed + increment;
}
//to decrease speed
public void applyBreaks(int decrement) {
speed = speed - decrement;
}
public  void  printStates() {
System.out.println("speed: " + speed + " gear: " + gear);
}
}
class Bike implements  Vehicle {
int speed;
int gear;
//to change gear
@Override
public void changeGear(int newGear) {
gear = newGear;
}
//to increase speed
@Override
public void speedUp(int increment) {
speed = speed + increment;
}
//to decrease speed
public void applyBreaks(int decrement) {
speed = speed - decrement;
}
public void printStates() {
System.out.println("speed: " + speed + " gear: " + gear);
}
}


class GFG {
public static void main(String[] args) {
//creating an instance of Bicycle
//doing some operations
Bicycle bicycle = new Bicycle();
bicycle.changeGear(2);
bicycle.speedUp(3);
bicycle.applyBreaks(1);
System.out.println("Bike present state :");
bicycle.printStates();
//creating instance of bike.
Bike bike = new Bike();
bike.changeGear(1);
bike.speedUp(4);
bike.applyBreaks(3);
System.out.println("Bike present state :");
bike.printStates();
}
}

因为您在接口(和/或实现(中拼错了方法名称。

接口方法名是applyBreakes,而实现称之为applyBreaks。 因此,类不实现接口方法,而是定义新的(不相关的(方法。


附言正确的拼写(英文(是"applyBrakes"。

"java:com.company.Bicycle 不是抽象的,不会覆盖 抽象方法在com.company.vehicle中applyBreakes(int(和相同的 自行车类。

意味着 Bicycle 类具有许多方法,但没有足够的方法成为完全定义的类。

在这种情况下,缺少的方法就是Vehicle说必须实现的方法,即applyBreaks(int)方法。

在接口中实现的方法applyBreakes(),但您在具体类中实现applyBreaks()
这似乎是一个拼写错误。

幸运的是,如果您使用@Override注释所有覆盖/实现方法,则可以尽早保护您免受此类编译错误的影响。

例如,您做到了:

@Override
public void speedUp(int increment) {
speed = speed + increment;
}

但是你没有这样做:

public void applyBreaks(int decrement) {
speed = speed - decrement;
}

@Override注释它,编译错误消息会更明确:

@Override 
public void applyBreaks(int decrement) {
speed = speed - decrement;
}

相关内容

最新更新