为什么我们需要在扩展它时覆盖run
类的方法thread
。只要我知道什么时候我们扩展一个类,我们就会覆盖抽象的方法。但是run方法定义了public void main()。为什么必须覆盖它。为什么我们需要重写run()方法扩展线程类
2
A
回答
1
线程的本质是它运行着某些东西......所以线程抽象自然需要你提供一些东西来运行。这是通过要求你实现run()来完成的。
0
https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#run()
因为线程实现Runnable,它具有不具有任何实现一个run()方法(它们无法预知你想要的东西“跑”)
因此,当扩展Thread类,你需要重写run()方法
PS:你可以创建一个扩展Thread类的类,并且不会覆盖run()方法,java不会抛出任何错误,但是当你启动Thread时,你将会只是执行一个空的实现(所以基本上什么都没有)
0
当您为某个目的创建线程时。要达到这个目的,你必须编写一个代码。
在Thread
类的run()
中,实现什么都不做。你有添加自己的逻辑来实现你的目的。简单地覆盖run()
写你的逻辑和完成。
现在,如果你有疑问,为什么Java的不守这个run()
作为抽象方法然后请参阅发布Why is Thread not an abstract class and start() not final?
0
当我们扩展一个类,我们不只是覆盖抽象方法。当我们需要在子类中提供特定的父类方法的更具体的实现时,重写就是我们所做的。我们在扩展线程类时覆盖run
的原因是我们希望某些代码以多线程方式运行。所以Java的创建者们已经同意了一个被覆盖的方法的名字。否则,每个开发人员都会使用他/她自己的名称作为该方法,编译器不知道多线程代码的位置。
相关问题
- 1. 为什么我们需要重写方法 - objective c?
- 2. 当子类从线程父类扩展时我们是否覆盖run方法
- 3. 为什么我们需要在android中扩展类时实现某些方法?
- 4. 当我们需要Arraylist中的Collections类方法时,为什么不扩展Collections?
- 5. 什么是扩展方法,为什么我们需要使用它?
- 6. 为什么我们需要addRequestHeader方法?
- 7. 为什么我们需要ContinueWith方法?
- 8. 为什么我们需要Buffer.isBuffer方法?
- 9. 扩展方法问题。为什么我需要使用someObj = someObj.somemethod();
- 10. 当我们扩展Thread类时,如何调用run()方法
- 11. 需要帮助线程的run方法
- 12. 当扩展SpringBootInitializer时,为什么我应该重写configure方法?
- 13. 为什么我们需要编写log.isDebugEnabled?
- 14. 为什么不能用私有扩展类方法重写基类方法?
- 15. 为什么我们要使用抽象类或方法,为什么不重写超类方法呢?
- 16. 为什么要使用扩展方法?
- 17. 为什么我们需要System类来调用out.println()方法?
- 18. 为什么我们需要包装类
- 19. 为什么开始我的线程不会调用run()方法?
- 20. 为什么我们需要为每个线程使用NSAutoreleasepool?
- 21. 为什么我无法为静态类创建扩展方法?
- 22. 为什么我们在扩展方法中使用“this”?
- 23. 重写run()方法
- 24. 扩展方法需要“this”?
- 25. 为什么我们需要一个明确的转换,而不是扩展方法而不是静态方法?
- 26. 我需要为C#扩展方法包含哪个程序集?
- 27. 为什么需要线程
- 28. 重写扩展方法需要组装参考
- 29. 重写LINQ扩展方法
- 30. 重写lambda扩展方法