2017-07-18 144 views
1

錯誤:錯誤:「<Class>不是抽象的,不重寫抽象方法<method>」

java:com.company.Bicycle is not abstract and does not override abstract method applyBreakes(int) in com.company.Vehicle and same for the Bike class.

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(); 

} 
} 
+1

因爲您在界面中將其稱爲'applyBreakes',而不是'applyBreaks '... – EpicPandaForce

回答

1

因爲你在接口(和/或執行)拼錯了方法名。

接口方法名稱爲applyBreakes,而實現方法稱爲applyBreaks。 所以這些類沒有實現接口方法,而是定義了新的(不相關的)方法。


P.S.正確的拼寫(英文)是「applyBrakes」。

+0

謝謝@Alex Shesterov –

1

"java:com.company.Bicycle is not abstract and does not override abstract method applyBreakes(int) in com.company.Vehicle and same for the Bike class."

意味着Bicycle類有許多方法,但沒有足夠的方法成爲完全定義的類。

在這種情況下,缺少的方法是Vehicle表示必須執行的方法,即applyBreaks(int)方法。

0

在界面中實現的方法是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; 
} 
相關問題