实现Runnable接口的线程的子类

时间:2015-05-30 08:19:05

标签: java multithreading oop interface runnable

为什么实现可运行接口的线程的子类不会强制我覆盖run方法,这让我感到困惑。基本上,当我创建实现Runnable的简单类时,它会强制我覆盖run方法。但是当我将普通类作为线程的子类时,它并没有强迫我重写该类。这背后的逻辑是什么?

2 个答案:

答案 0 :(得分:2)

这是因为Thread本身实现了run()。

@Override
public void run() {
    if (target != null) {
        target.run();
    }
}

默认情况下它不执行任何操作。如果我们扩展一个Thread,我们实现这个方法,以便它做一些有用的事情

答案 1 :(得分:2)

当非抽象类声明它实现了一个接口时,这意味着该类必须具有接口定义的每个方法的具体实现,但这些实现方法不必在类中显式,它们可以从超类继承。在此特定示例中,public void run()具有自己的Runnable,其子类继承,因此实现$_REQUEST的Thread的子类不需要添加自己的覆盖来满足编译器(尽管它可能确实有用)。