【发布时间】:2015-08-13 04:00:46
【问题描述】:
这让我很困惑,为什么实现可运行接口的线程子类不会强制我重写 run 方法。基本上,当我创建实现 Runnable 的简单类时,它会强制我重写 run 方法。但是当我将普通类作为线程的子类时,它不再强迫我重写该类。这背后的逻辑是什么?
【问题讨论】:
标签: java multithreading oop interface runnable
这让我很困惑,为什么实现可运行接口的线程子类不会强制我重写 run 方法。基本上,当我创建实现 Runnable 的简单类时,它会强制我重写 run 方法。但是当我将普通类作为线程的子类时,它不再强迫我重写该类。这背后的逻辑是什么?
【问题讨论】:
标签: java multithreading oop interface runnable
当一个非抽象类声明它实现了一个接口时,这意味着该类必须具有该接口定义的每个方法的具体实现,但这些实现方法不必在类中显式,它们可以从超类继承。在这个特定的例子中,java.lang.Thread 有自己的public void run(),子类继承,所以实现Runnable 的 Thread 子类不需要添加自己的覆盖来满足编译器(尽管它可能确实有用)。
【讨论】:
Object,那么使用返回String的方法实现它是有效的,例如)。
这是因为 Thread 本身实现了 run()。
@Override
public void run() {
if (target != null) {
target.run();
}
}
默认情况下它什么都不做。如果我们扩展一个线程,我们会实现这个方法,以便它做一些有用的事情
【讨论】: