我想在java中创建一个抽象类,强制所有子类实现SwingWorker
(加上SwingWorker
的抽象doInBackground()
和done()
)。< / p>
在AbstractClass中 -
abstract class Task extends SwingWorker<Void, Void>{};
我希望这会导致编译器在扩展类没有实现它时抛出异常,但事实并非如此。
我也不太确定如何表明我正在重写这个抽象类。我是否可以在ConcreteClass中重新声明它,如下所示?
class Task extends SwingWorker<Void, Void>{
...
}
或其他方式?
感谢您的帮助!
答案 0 :(得分:4)
你需要将方法声明为抽象,如下所示:
abstract class Task extends SwingWorker {
@Override
protected abstract Void doInBackground();
@Override
protected abstract void done();
};
答案 1 :(得分:3)
doInBackground()在SwingWorker中是抽象的,因此Task的任何具体子类都必须提供实现。
但是,done()在SwingWorker中并不是抽象的,因此不需要新的实现。如果您想强制子类重新实现它,您需要:
abstract class Task extends SwingWorker<Void, Void>{
@Override
protected abstract void done();
}
要创建具体的子类,只需像扩展任何其他类一样扩展Task,并使用实现覆盖抽象方法:
class SubTask extends Task {
@Override
protected void done(){
//implementation
}
@Override
public Void doInBackground(){
//implementation
}
}
答案 2 :(得分:0)
第一段代码将被编译,因为类Task也被标记为抽象,编译器接受它不实现祖先的抽象成员。但是你将无法实例化它(调用new Task();)。第二部分不应该编译,因为你没有实现抽象方法。要查看示例,请向下滚动此页面:SwingWorker