为什么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。那么你的问题是,为什么这个类是extendsThread没有abstract。如果该语言没有提供extendsfrom的其他类Thread,则程序员将不得不创建自己的class,该类extend来自Threadand重写该run()方法。

如果不是,为什么该方法未在Thread类中声明为final?

我能给出的唯一可能的解释是,start当将类引入JDK时,该语言的开发人员看到了一些重写的​​用例。我使用的Java的第一个版本是1.5,而我个人没有遇到用例,在该用例中我发现需要重写start。正如JB

Nizet在回答中所说

如果今天从头开始重新设计Java,那么很有可能设计会有所不同

以上是 为什么Thread不是抽象类,而start()不是final? 的全部内容, 来源链接: utcz.com/qa/425127.html

回到顶部