2012-01-09 21 views
0

我有一個抽象類,汽車它有一個所謂的舉動 所以具體類方法不斷拋出從抽象類的異常,儘管實施

public abstract class Automobile { 
    public void move() { 
     throw new UnsupportedOperationException(); 
    } 
} 

我有延伸我的抽象類和實現的具體類未實現方法移動method.My問題是方法不斷拋出的UnsupportedOperationException

public class Car extends Automobile{ 
    int x; 
    public void move(){ 
    x++; 
    } 
} 
+0

呃......那是因爲你明確地拋出異常。我建議你重新考慮你的抽象。 – mre 2012-01-09 13:08:51

+7

請顯示具體類的代碼。 – Tudor 2012-01-09 13:09:40

+1

爲什麼在抽象類中創建move()的實現而不是抽象化? – 2012-01-09 13:09:58

回答

3

這可能是在你的具體類的原因有很多:也許你的混凝土實際上並沒有延伸Foo?或者,也許它叫super.move()它的身體某處。

而不是拋出異常,正確的方法是將類和方法定義爲abstract以強制子類重寫它。

public abstract class Foo { 
    public abstract void move(); 
} 

請注意,如果Foo只有抽象方法,就像上面的例子,這就是你想要的,不是一個抽象類的interface。此外,你應該命名它來定義一個行爲

public interface Moving { 
    void move(); 
} 

然後:

public class MovingObject implements Moving { 
    .... 
    @Override 
    public void move() { 
     // your implementation 
    } 
    .... 
} 
+0

我的抽象類有幾個方法有實現。我的具體類擴展我的抽象類有具體的暗示 – 2012-01-09 13:18:56

+0

好吧然後:)你應該發佈代碼的實現,至少是一個move()方法,和調用代碼,所以我們可以看到它爲什麼拋出異常。我的猜測是在一個super.move() – Guillaume 2012-01-09 13:23:33

+0

我已經添加了一個實現到我的代碼,請看看 – 2012-01-09 13:33:42

1

你打電話super.move()在你的實現類?如果您使用Source-> Override/Implement Methods ...,則Eclipse會默認生成該調用...

否則,我認爲您沒有正確覆蓋該方法。

+0

不,我沒有使用super.move()。在我的類中擴展了抽象類,我有一個方法的具體實現 – 2012-01-09 13:24:12

相關問題