抽象類VS介面
抽象類VS介面
相同點
代表系統的抽象層
都不能被例項化
都能包含抽象方法
注意:用於描述系統提供的服務,不必提供具體實現
不同點
抽象類在抽象方法中可以為部分方法提供預設實現(解釋:抽象類為父類時,可為子類提供他們都有的
行為且這個行為必須相同,這樣避免程式碼重複,若不相同則應該為抽象方法,去每個子類重寫實現,進
而去多型。)
介面只能包含抽象方法(介面不能隨意更改,必須穩定,因為改後所有的實現類都必須改動,但是抽象類
可以增加普通方法,因為子類會直接繼承過去,這點體現的是抽象類比較於介面的好處)
一個類只能繼承一個直接的父類(引申問題為什麼只能單根繼承?因為子類覆蓋父類
的方法java虛擬機器的繫結機制會更加複雜,需要更多的判斷子類覆蓋的到底是哪個父類的方法,這就不明確!增加了java
虛擬機器的複雜度,所以乾脆單根繼承)
一個類可以實現多個介面(問題:為啥介面實現多個而繼承只能有一個父類?答:java虛擬機器繫結的是具體實現類,繫結
非常明確,java虛擬機器的複雜度會小很多)
已存在的繼承樹,可以方便的抽取介面,但是抽取抽象類不容易。解釋:例如手機(裡面有手機1,手機2) 與照相機
兩個系統,現在需要給手機2增加照相功能,最直接的方式就增加一個照相的介面,然後手機2實現這個介面,而照相機也實現
很好改,但是如果想抽象一個照相的抽象類就需要手機2繼承這個類可是手機2只能繼承手機類,如果將照相類間接去讓手機2去繼承
但手機1也會繼承這就不合理了,所以很難這就是介面更容易。
使用的原則
介面做系統與外界的互動視窗
介面提供給別人的服務功能,不會受型別的限制(兩個不一樣的系統,所以系統互訪是以介面來交流的)
介面本身一旦定製公開,就不允許修改
抽象類可完成部分功能實現,還有部分功能可作為系統的擴張點(系統的互動用介面,在系統內部有一些功能介於抽象和具體之間
有部分功能實現而有另外功能需要子類自己去實現就用抽象類)
相關文章
- 抽象類與介面抽象
- 抽象類和介面抽象
- Java的抽象類 & 介面Java抽象
- 抽象類 & 介面比較抽象
- 介面和抽象類 (abstract)抽象
- 介面的行為抽象和抽象類的行為抽象抽象
- 抽象類及介面詳解抽象
- java中抽象類和介面Java抽象
- 介面和抽象類詳解抽象
- Java 的抽象類, 介面以及內部類Java抽象
- [譯]Typescript : 類 vs 介面TypeScript
- Java總結-抽象類與介面Java抽象
- Java基礎-抽象類和介面Java抽象
- java中的抽象類與介面Java抽象
- Java抽象類和介面 小白版Java抽象
- 介面和抽象類的區別抽象
- Java的抽象類與介面理解Java抽象
- 介面、抽象類、普通類之間的關係抽象
- 介面是否可繼承(extends)介面? 抽象類是否可實現 (implements)介面? 抽象類是否可繼承具體類(concrete class)?繼承抽象
- 抽象類和介面,你瞭解多少?抽象
- 關於抽象類和介面的初步理解抽象
- 這次,徹底弄懂介面及抽象類抽象
- java介面和抽象類的簡單理解Java抽象
- Java中抽象類和介面的區別Java抽象
- JAVA基礎之三-介面和抽象類Java抽象
- Java中抽象類與介面的區別Java抽象
- Java中的介面與抽象類詳解Java抽象
- PHP中的抽象類、介面與性狀PHP抽象
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- 結合實戰理解 Java 抽象類和介面Java抽象
- 抽象方法和抽象類抽象
- 抽象類抽象
- Java:面試題:抽象類與介面的區別Java面試題抽象
- Java基礎10 介面的繼承與抽象類Java繼承抽象
- JavaSE基礎知識學習—–抽象類和介面Java抽象
- Java中的介面與抽象類設計原則Java抽象
- PHP 抽象類繼承抽象類時的注意點PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- 物件導向 -- 三大特性之繼承 補充 抽象類 介面類物件繼承抽象