1. 程式人生 > >關於Java使用介面實現多重繼承

關於Java使用介面實現多重繼承

首先在我們使用介面可以實現Java的多重繼承,這裡為什麼Java自身不提供多重繼承的機制呢?

這裡有一種被稱為菱形繼承的危險:

如圖,我們有一個動物基類,本身帶有一個叫聲的方法。我們在其派生類狗和貓中分別重寫這個方法分別輸出二者的叫聲。這裡問題就來了,如果我們有一個狗貓類同時繼承了狗和貓類。那麼他同時也繼承了二者的叫聲方法,那麼我們在例項化該類時,我們的叫聲方法究竟是貓的呢還是狗的呢?

所以Java本身不提供對多重繼承的支援,但是Java提供使用介面來實現相似的功能,因為我們知道介面類中的方法都是抽象方法沒有具體的實現,所以不會出現上述問題。

介面的定義:

[public] interface iname [extends i2name]

介面的實現:

[public] [qualifiers] class classname implements iname [, i2name]

這裡還有一個是關於介面的特點的問題,這也是我同學去公司面試的一個問題,叫我們說出介面抽象類的5個不同點?

介面

抽象類

修飾符

interface

abstract class

屬性

只有靜態常量(可省略public static)

任意

方法

必須是公共的抽象方法

任意

生成物件

1.不能例項化

2.無構造方法

1.不能例項化

2.有構造方法

繼承

多重實現

單根繼承