为什么将Thread类实现为常规类,而不是将run()方法抽象为抽象类。
这个问题实际上归结为这样一个事实,即您应该始终偏向于继承而不是继承。
如果将该
Thread类声明为
abstract,该语言将必须提供另一个从它扩展的类,程序员可以使用它创建一个
Thread。那么你的问题是,为什么这个类是
extends从
Thread没有
abstract。如果该语言没有提供
extendsfrom的其他类
Thread,则程序员将不得不创建自己的class,该类
extend来自
Threadand重写该
run()方法。
如果不是,为什么该方法未在Thread类中声明为final?
我能给出的唯一可能的解释是,
start当将类引入JDK时,该语言的开发人员看到了一些重写的用例。我使用的Java的第一个版本是1.5,而我个人没有遇到用例,在该用例中我发现需要重写
start。正如JB
Nizet在回答中所说
如果今天从头开始重新设计Java,那么很有可能设计会有所不同



