2014-06-16 39 views
0

「爲什麼在Java中多重繼承是不可能的?」與問題 有什麼不同?「爲什麼Java不支持多繼承?」或者兩者都是相關的。 我知道這已經得到了回答,只是尋找差異,如果有的話不是答案的原因。爲什麼在java中不可能存在多重繼承

+0

(換句話說,同樣的事情,不可能,因爲它是不允許的。) – awksp

+0

一種元問題?!但爲了幫助你,兩個問題都是一樣的。 –

+0

@AbimaranKugathasan在我看來,並不完全正確的重複;該問題只是解決了除接口以外的其他實現多重繼承的方法,並沒有涉及*爲什麼* – awksp

回答

2

兩者都是相同的問題。

如果有可能,我們可能會以着名的Diamond death problem結束。

Java的創建者選擇不允許多重繼承的原因是它可能變得相當混亂。

概括地說,問題是,如果一個類擴展的其他兩個類,都超了,比如說,一個doStuff()方法,其中doStuff()版本將子類繼承?這個問題可以導致被稱爲一個場景「致命的鑽石死亡」,

由於可以在多繼承設計中創建的類圖的形狀。當類別BC均延伸A,並且BC均繼承A的方法時形成菱形。如果類D擴展了BC,並且BC都已經覆蓋了A中的方法,那麼類D理論上已經繼承了相同方法的兩個不同實現。 「

所以在Java中爲了簡單起見,你只有一個基類,搜索基類是從上到下的線性搜索,簡單,快速和高效

但是多重繼承是有用的,可以想象同一個類可能想以不同的客戶端來表示它自己,這是通過使用接口來完成的,接口就像基類,但是沒有數據,也沒有方法

當你實現一個interface時,你必須提供所需的所有成員,這很容易理解。投到interface所有需要做的是從object類型開始,並向上搜索基類,查找實現interface的基類。

接口爲10%的大腦空間和15%的CPU空間執行95%的工作多重繼承。接口不能做多重繼承的5%可以簡單地通過composition實現。

這就是爲什麼它不被支持。