在多種編程語言中,都會有父類子類的繼承關係,可是多繼承會存在以下的鑽石問題。編程
來看看鑽石:編程語言
假如A有一個接口,B,C都有本身的實現,那麼繼承B和C的D,D的實例賦值給A的引用調用這個接口該返回什麼?blog
因爲這種狀況下類繼承圖的形狀,它被稱爲「鑽石問題」。在這種狀況下,A類位於頂部,B和C分別位於其下方,D將二者鏈接在一塊兒造成菱形。繼承
對於Java類不支持多繼承,因此不存在這樣的問題,至於C++,這麼寫的時候好像是不能經過編譯的。接口
可是在Java8以後,接口中引入了default和static方法,接口是支持多繼承的,因此可能就會存在這樣的問題,編譯執行不報錯,但結果不是很好理解。好比下面的示例,你以爲執行的是哪個m方法呢?ip
固然按照菱形的我能夠寫個這樣的it
在每個接口裏面都有 default void show()方法,那麼下面的將會輸出什麼?爲何是它?編譯
參考:引用
https://www.quora.com/What-is-the-diamond-problem-in-programmingprogramming
https://en.wikipedia.org/wiki/Multiple_inheritance