2010-03-01 129 views
2

我想在java中創建一個抽象類,強制其所有子類實現SwingWorker(加上SwingWorker的抽象doInBackground()done())。強制子類實現抽象子類

在抽象類 -

abstract class Task extends SwingWorker<Void, Void>{}; 

我希望它可以使編譯器扔在擴展類沒有實現它的一個例外,但事實並非如此。

我也不太清楚我將如何去表明我重寫這個抽象類。我是否在ConcreteClass中重新聲明它如下?

class Task extends SwingWorker<Void, Void>{ 
    ... 
} 

或其他方式?

感謝您的幫助!

回答

4

需要聲明的方法也爲抽象的,是這樣的:


abstract class Task extends SwingWorker { 
    @Override 
    protected abstract Void doInBackground(); 
    @Override 
    protected abstract void done(); 
}; 
+0

,然後我怎麼Ø在具體的課堂上對此表示懷疑? – chama 2010-03-01 16:14:14

+0

的方式.. \t類MyImplementationOfTask擴展任務 \t { \t \t @覆蓋 \t \t公共無效doInBackground(){ \t \t} \t \t @覆蓋 \t \t公共無效完成(){ \t \t } \t \t \t} – elou 2010-03-01 16:20:55

0

第一段代碼將被編譯,因爲類Task也被標記爲抽象,編譯器接受它不實現祖先的抽象成員。但是你將無法實例化它(調用新的Task();)。第二部分不應該編譯,因爲你沒有實現抽象方法。要查看示例,請向下滾動此頁面:SwingWorker

3

doInBackground()在SwingWorker中是抽象的,因此Task的任何具體子類都必須提供實現。

done()然而,在SwingWorker中不是抽象的,所以不需要新的實現。如果你要強制子類來重新實現它,你需要:

abstract class Task extends SwingWorker<Void, Void>{ 
    @Override 
    protected abstract void done(); 
} 

要創建的具體子類,只是延長任務一樣,你會擴展其他類,並重寫的抽象方法與實現:

class SubTask extends Task { 
    @Override 
    protected void done(){ 
     //implementation 
    } 

    @Override 
    public Void doInBackground(){ 
     //implementation 
    } 
}