强制子类实现抽象子类

时间:2010-03-01 15:56:15

标签: java abstract-class subclass swingworker

我想在java中创建一个抽象类,强制所有子类实现SwingWorker(加上SwingWorker的抽象doInBackground()done())。< / p>

在AbstractClass中 -

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

我希望这会导致编译器在扩展类没有实现它时抛出异常,但事实并非如此。

我也不太确定如何表明我正在重写这个抽象类。我是否可以在ConcreteClass中重新声明它,如下所示?

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

或其他方式?

感谢您的帮助!

3 个答案:

答案 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