【发布时间】:2016-05-13 07:15:27
【问题描述】:
为什么我们在扩展thread类的时候需要重写run方法。只要我知道当我们扩展一个类时,我们就会覆盖抽象的方法。但是run方法有定义public void main()。为什么必须覆盖它。
【问题讨论】:
标签: java
为什么我们在扩展thread类的时候需要重写run方法。只要我知道当我们扩展一个类时,我们就会覆盖抽象的方法。但是run方法有定义public void main()。为什么必须覆盖它。
【问题讨论】:
标签: java
线程的本质是它运行一些东西......所以线程抽象自然会要求你提供一些东西来运行。这在 Java 中通过要求您实现 run() 来完成。
【讨论】:
https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#run()
因为 Thread 实现了 Runnable 并且它有一个 run() 方法,它没有任何实现(他们无法预测你想要“运行”什么)
因此,当你扩展 Thread 类时,你需要重写 run() 方法
P.S:您可以创建一个扩展 Thread 类并且不覆盖 run() 方法的类,java 不会抛出任何错误,但是当您启动 Thread 时,您将只是执行一个空实现(所以基本上什么都没有)
【讨论】:
当您出于某种目的创建线程时。为了达到这个目的,你必须编写代码。
在Thread 类的run() 中,实现什么也不做。您已经添加了自己的逻辑来实现您的目的。只需覆盖run(),将您的逻辑写入其中即可。
现在,如果您对为什么 Java 没有将 run() 保留为抽象方法有疑问,请参阅帖子 Why is Thread not an abstract class and start() not final?
【讨论】:
当我们扩展一个类时,我们不会只覆盖抽象方法。当我们需要在子类中提供特定父类方法的更具体的实现时,我们会做覆盖。我们在扩展线程类时覆盖run 的原因是我们希望某些代码以多线程方式运行。因此,Java 的创建者已经商定了要覆盖的方法的名称。否则每个开发人员都会使用他/她自己的方法名称,编译器将不知道多线程代码在哪里。
【讨论】: