「爲什麼在Java中多重繼承是不可能的?」與問題 有什麼不同?「爲什麼Java不支持多繼承?」或者兩者都是相關的。 我知道這已經得到了回答,只是尋找差異,如果有的話不是答案的原因。爲什麼在java中不可能存在多重繼承
0
A
回答
2
兩者都是相同的問題。
如果有可能,我們可能會以着名的Diamond death problem
結束。
Java的創建者選擇不允許多重繼承的原因是它可能變得相當混亂。
概括地說,問題是,如果一個類擴展的其他兩個類,都超了,比如說,一個doStuff()
方法,其中doStuff()
版本將子類繼承?這個問題可以導致被稱爲一個場景「致命的鑽石死亡」,
由於可以在多繼承設計中創建的類圖的形狀。當類別B
和C
均延伸A
,並且B
和C
均繼承A
的方法時形成菱形。如果類D
擴展了B
和C
,並且B
和C
都已經覆蓋了A
中的方法,那麼類D
理論上已經繼承了相同方法的兩個不同實現。 「
所以在Java中爲了簡單起見,你只有一個基類,搜索基類是從上到下的線性搜索,簡單,快速和高效
但是多重繼承是有用的,可以想象同一個類可能想以不同的客戶端來表示它自己,這是通過使用接口來完成的,接口就像基類,但是沒有數據,也沒有方法
當你實現一個interface
時,你必須提供所需的所有成員,這很容易理解。投到interface
所有需要做的是從object
類型開始,並向上搜索基類,查找實現interface
的基類。
接口爲10%的大腦空間和15%的CPU空間執行95%的工作多重繼承。接口不能做多重繼承的5%可以簡單地通過composition
實現。
這就是爲什麼它不被支持。
相關問題
- 1. 爲什麼你不能在c#中做多重繼承?
- 2. 多重繼承不能在C#中支持。爲什麼?
- 3. 爲什麼java不支持多繼承?
- 4. 爲什麼Java不支持多繼承?
- 5. Java爲什麼我不能使用具有功能接口的多重繼承
- 6. 什麼不能在.Net中繼承?
- 7. 爲什麼在多重繼承過程中我不能dynamic_cast「橫向」?
- 8. 爲什麼不能從接口繼承
- 9. 爲什麼我不能繼承datetime.date?
- 10. 爲什麼我不能繼承IO.Directory?
- 11. 爲什麼不能繼承SqlDataReader類?
- 12. 爲什麼C#不支持多繼承?
- 13. 爲什麼vb.net不支持多繼承?
- 14. 爲什麼Java Generic不能設計爲繼承父類Generic類?
- 15. 爲什麼我不能在繼承中使用BASE
- 16. 爲什麼我不能在python3中繼承元組?
- 17. 多重繼承在Ruby,Java等
- 18. Java的多重繼承ActionBarActivity
- 19. Java:替代多重繼承
- 20. 爲什麼在CSS中沒有繼承
- 21. 什麼是多重虛擬繼承?
- 22. 爲什麼多重繼承不是接口的主要目的?
- 23. 爲什麼對象(根)類不會衝突多重繼承
- 24. 爲什麼不推薦使用多重繼承?
- 25. 多重繼承ambigious功能
- 26. 重用繼承在Java
- 27. 多重繼承在C++
- 28. 在C#中需要多重繼承功能。我究竟做錯了什麼?
- 29. 繼承在Java中
- 30. 繼承在Java中
(換句話說,同樣的事情,不可能,因爲它是不允許的。) – awksp
一種元問題?!但爲了幫助你,兩個問題都是一樣的。 –
@AbimaranKugathasan在我看來,並不完全正確的重複;該問題只是解決了除接口以外的其他實現多重繼承的方法,並沒有涉及*爲什麼* – awksp