class正在实现runnable接口,但没有定义run方法

时间:2012-11-28 14:00:56

标签: java multithreading

class Qus3 extends Thread implements Runnable {

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

此代码编译时没有任何错误,但不必定义所有方法 一个接口否则声明类抽象。在上面的代码中,类没有被声明为abstract而run()也没有被类定义,虽然它已经实现了Runnable接口,为什么代码仍然正确?

3 个答案:

答案 0 :(得分:2)

线程实现Runnable。 from the API

  

public void run()

     

如果使用单独的Runnable运行对象构造此线程,   然后调用Runnable对象的run方法;否则,这个   方法什么都不做并且返回。

     

Thread的子类应该重写此方法。

因此,您不会收到编译错误,但run将不会执行任何操作。新启动的线程将执行空运行方法并终止。

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

答案 1 :(得分:1)

运行线程覆盖,因为你扩展了Thread,你的run方法就实现了。

答案 2 :(得分:0)

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

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