1
class Qus3 extends Thread implements Runnable {

    public static void main(String args[]) {
        Qus3 q3 = new Qus3();
        q3.start();
    }
}

这段代码编译没有任何错误,但不需要定义接口的所有方法,否则声明类抽象。在上面的代码中,类没有被声明为抽象,并且 run() 也没有被类定义,尽管它已经实现了Runnable接口,为什么代码还是正确的?

4

3 回答 3

2

线程实现可运行。来自 API

公共无效运行()

如果该线程是使用单独的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,此方法不执行任何操作并返回。

Thread 的子类应覆盖此方法。

所以你不会得到一个编译错误,但run不会做任何事情。新启动的线程将执行空运行方法并终止。

您的代码是正确的,但最好避免扩展 Thread,创建一个单独的 Runnable 并将其传递给新线程。这样,您不仅可以扩展 Thread 以外的东西,而且不会冒意外覆盖线程方法的风险。

于 2012-11-28T14:02:54.983 回答
1

线程覆盖运行,因为你扩展线程,你的运行方法被实现。

于 2012-11-28T14:02:56.603 回答
0

类实现了可运行但也扩展了线程。Thread 内部也实现了 Runnable 并为其提供了实现。这就是它编译成功的原因。

如果你删除extends Thread,你会看到它会给出编译错误。

于 2012-11-29T07:25:17.480 回答