爲什麼我們需要在擴展它時覆蓋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擴展方法