PHP文檔 接口php
http://php.net/manual/zh/language.oop5.interfaces.phpjava
PHP文檔 抽象類編程
http://php.net/manual/zh/language.oop5.abstract.php設計模式
抽象和接口的區別是使用場景oop
https://blog.csdn.net/hanxueyu666/article/details/75712917.net
防止數據丟失,複製過來一份設計
接口和抽象類有什麼區別對象
在應用場景下,選擇使用接口和抽象類的依據是什麼?blog
1、抽象類和接口在語法上的異同:繼承
一、相同點
都不能被實例化
二、不一樣點
第一點. 接口是抽象類的變體,接口比抽象類更加抽象,接口中全部的方法都是抽象的。
第二點. 每一個類只能繼承一個抽象類,可是能夠實現多個接口
第三點.抽象類中不必定都是抽象方法,抽象的而抽象類能夠實現部分方法。可是接口中方法必須爲public修飾的、抽象的不能實現具體的法。
第四點. 接口中基本數據類型爲static 而抽象類不是的。
2、應用場景
應用都是基於規則的應用,也就是基於語法的應用,咱們能夠根據語法上的異同點來總結抽象類和接口的應用場景
相同點沒有什麼可說的,咱們從不一樣點下手。
一、第一個重要的不一樣點就是,
抽象類中不必定都是抽象的方法,也能夠有具體實現的方法,這樣就能夠把你們公用的方法提高到抽象類中,而後具體的方法能夠留給子類本身實現(此處經典的應用,模板方法設計模式)。因此抽象類能夠更好的實現代碼的複用
二、另外一個重要的不一樣就是類能夠實現多個接口。
接口和抽象類的概念不同。這個能夠理解爲接口是對動做的抽象,抽象類是對根源的抽象(即對本質的抽象與其餘類的本質不一樣)。
抽象類表示的是,這個對象是什麼。接口表示的是,這個對象能作什麼。好比,男人,女人,這兩個類(若是是類的話……),他們的抽象類是人。說明,他們都是人。人能夠吃東西,狗也能夠吃東西,你能夠把「吃東西」定義成一個接口,而後讓這些類去實現它.
因此,在高級語言上,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),可是能夠實現多個接口(吃飯接口、走路接口)。
當你關注一個事物的本質的時候,用抽象類;當你關注一個操做的時候,用接口。
另外一個重要的概念就是多態,多態經過分離作什麼和怎麼作,從另外一個角度將接口和實現分離出來。多態不但可以改善代碼的組織結果和可讀性,還能建立可擴展的程序----即不管在項目最初建立時仍是在須要添加新功能時均可以「生長」的程序。因爲接口更關注於動做的實現,多態主要是分離「作什麼」和「怎麼作」,因此接口的另外一個重要的應用就是多態的實現(固然抽象類也能夠實現多態,可是接口更加合適)。
抽象類的功能要遠超過接口,可是,定義抽象類的代價高。由於高級語言來講(從實際設計上來講也是)每一個類只能繼承一個類。在這個類中,你必須繼承或編寫出其全部子類的全部共性。雖然接口在功能上會弱化許多,可是它只是針對一個動做的描述。並且你能夠在一個類中同時實現多個接口。在設計階段會下降難度的。
(參考:http://blog.csdn.net/fenglibing/article/details/2745123, 《java編程思想》)