1. 介面和抽象類的區別
抽象類可以存在普通成員函式,而介面中只能存在public abstract方法
抽象類中的成員變數客戶是各種型別的,而介面中的成員變數只能是public static final型別的
抽象類只能繼承一個,介面可以實作多個
介面的設計目的,是對類的行為進行約束(更準確的說是一種"有"約束,因為介面不能規定類不可以有什么行為),也就是提供一種機制,可以強制要求不同的類具有相同的行為,它只約束了行為的有無,但不對如何實作行為進行限制,
而抽象類的設計目的,是代碼復用,當不同的類具有某些相同的行為(記為行為集合A),且其中一部分行為的實作方式一致時(A的非真子集,記為B),可以讓這些類都派生于一個抽象類,在這個抽象類中實作了B,避免讓所有的子類來實作B,這就達到了代碼復用的目的,而A減B的部分,留給各個子類自己實作,正是因為A-B在這里沒有實作,所以抽象類不允許實體化出來(否則當呼叫到A-B時,無法執行),
抽象類是對類本質的抽象,表達的是is a 的關系,比如:綿羊is a 羊,抽象類包含并實作子類的通用特性,將子類存在差異化的特性進行抽象,交由子類去實作,
而介面是對行為的抽象,表達的是like a 的關系,比如:鳥 like a 飛行器(向飛行器一樣可以飛),但其本質上是is a 鳥,介面核心是定義行為,即實作類可以做什么,至于實作類主體是誰、是如何實作,介面并不關心,
使用場景:當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用介面,
抽象類的功能要遠超過介面,但是,定義抽象類的代價高,因為高級語言(從實際設計上來說也是)每個類只能繼承一個類,在這個類中,你必須繼承或撰寫出其所有子類的所有共性,雖然介面在功能上會榷訓許多,但是它只針對一個動作的描述,而且你可以在一個類中實作多個介面,在設計階段會降低難度,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/288141.html
標籤:其他
