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