![](/img/trans.png)
[英]Passing Runnable instance in another Runnable implementing class, where run() method of former needs a reference of later
[英]class is implementing runnable interface but not defining the run method
class Qus3 extends Thread implements Runnable {
public static void main(String args[]) {
Qus3 q3 = new Qus3();
q3.start();
}
}
这段代码编译没有任何错误,但是没有必要定义接口的所有方法,否则声明类抽象。在上面的代码中,Class没有被声明为abstract而run()也没有被类定义,尽管它已经实现了Runnable接口,为什么代码仍然正确?
线程实现了Runnable。 来自API :
public void run()
如果使用单独的Runnable运行对象构造此线程,则调用该Runnable对象的run方法; 否则,此方法不执行任何操作并返回。
Thread的子类应该重写此方法。
所以你不会得到编译错误,但run
不会做任何事情。 新启动的线程将执行空运行方法并终止。
您的代码是正确的,但最好避免扩展Thread,创建一个单独的Runnable并将其传递给新线程。 这样,你不仅可以扩展Thread之外的其他东西,而且不会有意外覆盖线程方法的风险。
线程覆盖运行,因为您扩展了Thread,所以实现了run方法。
类实现了Runnable,但也扩展了Thread。 内部线程还实现了Runnable并为其提供了实现。 这就是它成功编译的原因。
如果删除extends Thread
,您将看到它将给出编译错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.