class Qus3 extends Thread implements Runnable {
public static void main(String args[]) {
Qus3 q3 = new Qus3();
q3.start();
}
}
此代码编译时没有任何错误,但不必定义所有方法 一个接口否则声明类抽象。在上面的代码中,类没有被声明为abstract而run()也没有被类定义,虽然它已经实现了Runnable接口,为什么代码仍然正确?
答案 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
,您会看到它会出现编译错误。