2010-03-01 122 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 
    } 
}