当我在互联网上搜索有关扩展Thread类的信息时,遇到的所有示例都覆盖了run()
方法。我还在程序中扩展了Thread类,但尚未定义run()
方法。它只是另一个类(我将其称为MyClass),它扩展了Thread类,具有构造函数和我定义的一些方法。但是,我很困惑,因为我在Main类中创建了MyClass对象,并在start()
方法中使用该对象调用了main()
方法。而且仍然有效。
我的问题是run()
方法是由Java编译器(如默认构造函数)隐式定义的,还是在扩展Thread类时根本不需要重写该方法?
答案 0 :(得分:2)
否,Java编译器未隐式定义run()
方法。是explicitly defined by the Thread
class。
如果此线程是使用单独的
Runnable
运行对象构造的,则调用该Runnable
对象的run
方法;否则,此方法不执行任何操作并返回。
它不是abstract
,因此不需要被覆盖。这里的run
方法没有什么特别的。
由于要扩展Thread
而不提供单独的Runnable
,因此您的类继承了run
方法; run
运行且不执行任何操作。
因为它什么都不做,所以不是很有用。通常,您想在自己的Thread
中做某事,因此通常在以这种方式创建Thread
时,run
会被覆盖以做一些有用的事情。