最后討論一下無法繼承多種類的裝配問題。該問題的原因在于Java不允許多層繼承。
Java不能進(jìn)行多層繼承。這一點(diǎn)大多經(jīng)常作為其優(yōu)點(diǎn)而不是缺點(diǎn)而被提出來。C++允許多層繼承,但結(jié)果卻致使程序變得非常復(fù)雜,而且還產(chǎn)生了難以理解的錯誤。
多層繼承在裝配時會很復(fù)雜
多層繼承會在如下幾個方面導(dǎo)致混亂。第一是名稱的沖突。在繼承具有相同名稱的其他類時,不知道是哪個類的方法將會被調(diào)用(圖5)。這一點(diǎn)是在一個類繼承兩個已經(jīng)繼承了某一個類的類時經(jīng)常發(fā)生的問題。這種繼承稱為菱形繼承(圖6)。在分別改寫(override)最上層的類的方法后,就會引起被最下層的類所調(diào)用的問題。
http://china.nikkeibp.co.jp/china/img_data/030129java12.jpg | 圖5●在需要繼承兩個具有相同名稱的方法的超級類時,其名稱就會發(fā)生沖突。這一點(diǎn)是經(jīng)常被作為多層繼承的問題而指出來的地方(點(diǎn)擊放大) |
|