關於Java使用介面實現多重繼承
阿新 • • 發佈:2018-12-26
首先在我們使用介面可以實現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.有構造方法 |
繼承 |
多重實現 |
單根繼承 |