1. 程式人生 > >Java有了繼承,為什麼還要介面

Java有了繼承,為什麼還要介面

顯示世界裡有多重繼承的需求,如下圖。貓和狗分屬不同的科目,但是它們都是寵物。它們應該有寵物類的共有行為。


看上去貓和狗需要也繼承寵物類,如果寵物類與動物類都繼承一種生物類,勢必出現菱形繼承情況。如下圖。當底層類呼叫兩個父類都具有的方法時,編譯器就不知道該呼叫哪一個了。


為解決以上問題,Java引入了介面這個方式,介面實際是是一個純的只具有抽象方法的集合,它沒有任何實現,不會導致菱形繼承的問題。它提供了一個類去繼承一個以上的來源類,擁有多個來源類的方法。當然這些來源類,只允許有一個父類,其它都必須是介面。

不同的繼承類可以實現相同的介面,如下圖。


圖片來自Head First Java一書。

什麼時候用定義父類,什麼時候定義介面?

狗是一種犬科動物,狗可以扮演寵物的角色。 當是一種什麼什麼的時候,就可以定義父類了,當扮演什麼什麼角色的時候,就可以定義一種介面。