为什么Thread不是抽象类,而start()不是final?
为什么将Thread
类实现为常规类而不是将 run()
方法实现为 类。
会不会带来任何问题?或以这种方式有什么用吗?
而且,该Thread.start()
方法应该是一种非常特定的方法,
(如果我没记错的话)。因此,我想该final
关键字比其他任何方法都更适合此操作。
但是我可以重写此方法并根据需要使用它,
public class Test extends Thread { public static void main (String... args) {
Thread test = new Test();
test.start();
}
@Override
public void run() {
System.out.println("New thread started...");
}
@Override
public void start() {
System.out.println("Did anyone tell you I will spawn a new thread??");
}
}
它显然只印了,
有人告诉你我会产生一个新线程吗?
除了使工程师取代您感到困惑之外,还有什么其他用途?
如果没有,为什么该方法未在Thread类中声明为final?
回答:
为什么将Thread类实现为常规类,而不是将run()方法抽象为抽象类。
这个问题实际上归结为这样一个事实,即您应该始终偏向于继承而不是继承。
如果将该Thread
类声明为abstract
,该语言将必须提供另一个从它扩展的类,程序员可以使用它创建一个Thread
。那么你的问题是,为什么这个类是extends
从Thread
没有abstract
。如果该语言没有提供extends
from的其他类Thread
,则程序员将不得不创建自己的class,该类extend
来自Thread
and重写该run()
方法。
如果不是,为什么该方法未在Thread类中声明为final?
我能给出的唯一可能的解释是,start
当将类引入JDK时,该语言的开发人员看到了一些重写的用例。我使用的Java的第一个版本是1.5,而我个人没有遇到用例,在该用例中我发现需要重写start
。正如JB
Nizet在回答中所说
如果今天从头开始重新设计Java,那么很有可能设计会有所不同
以上是 为什么Thread不是抽象类,而start()不是final? 的全部内容, 来源链接: utcz.com/qa/425127.html