欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

Java為什么不支持多繼承

Java為什么不支持多繼承?

這是非常經(jīng)典的問題,與為什么 String 在 Java 中是不可變的很類似; 這兩個(gè)問題之間的相似之處在于它們主要是由 Java 創(chuàng)作者的設(shè)計(jì)決策使然。

為什么Java不支持多重繼承, 可以考慮以下兩點(diǎn):

第一個(gè)原因圍繞鉆石形繼承問題產(chǎn)生的歧義,考慮一個(gè)類 A 有 foo() 方法, 然后 B 和 C 派生自 A, 并且有自己的 foo() 實(shí)現(xiàn),現(xiàn)在 D 類使用多個(gè)繼承派生自 B 和C,如果我們只引用 foo(), 編譯器將無法決定它應(yīng)該調(diào)用哪個(gè) foo()。這也稱為 Diamond 問題,因?yàn)檫@個(gè)繼承方案的結(jié)構(gòu)類似于菱形,見下圖:

即使我們刪除鉆石的頂部 A 類并允許多重繼承,我們也將看到這個(gè)問題含糊性的一面。如果你把這個(gè)理由告訴面試官,他會(huì)問為什么 C++ 可以支持多重繼承而 Java不行。嗯,在這種情況下,我會(huì)試著向他解釋我下面給出的第二個(gè)原因,它不是因?yàn)榧夹g(shù)難度, 而是更多的可維護(hù)和更清晰的設(shè)計(jì)是驅(qū)動(dòng)因素, 雖然這只能由 Java 言語設(shè)計(jì)師確認(rèn),我們只是推測(cè)。維基百科鏈接有一些很好的解釋,說明在使用多重繼承時(shí),由于鉆石問題,不同的語言地址問題是如何產(chǎn)生的。

對(duì)我來說第二個(gè)也是更有說服力的理由是,多重繼承確實(shí)使設(shè)計(jì)復(fù)雜化并在強(qiáng)制轉(zhuǎn)換、構(gòu)造函數(shù)鏈接等過程中產(chǎn)生問題。假設(shè)你需要多重繼承的情況并不多,簡(jiǎn)單起見,明智的決定是省略它。此外,Java 可以通過使用接口支持單繼承來避免這種歧義。由于接口只有方法聲明而且沒有提供任何實(shí)現(xiàn),因此只有一個(gè)特定方法的實(shí)現(xiàn),因此不會(huì)有任何歧義。

接口繼承 java,Java為什么不支持多繼承