抽象類是一種特殊的類,而接口是一種特殊的抽象類編程
抽象類是一種特殊的類設計
定義:一個方法若是沒有方法體,則這個方法就是抽象方法。(沒有方法體的方法叫抽象方法)code
一、 一個方法沒有方法體(也沒有花括號),直接用分號結束的方法; 二、 若是是抽象方法,必須使用abstract抽象關鍵字形容對象
注意:blog
一、只要有abstract修飾的類就是抽象類繼承
二、除了在抽象類中能夠有抽象方法以外,和正常的類徹底同樣接口
三、抽象類不能實例化對象ip
四、若是抽象類有子類,若是子類要想能被實例化,則子類必須重寫(實現)父類中所有的抽象方法,不然這個子類不能被實例化,若是隻是實現部分,那麼這個子類仍是抽象類面向對象編程
實現父類中的方法,什麼叫「實現」,就是具體實現,要包含有方法體class
抽象方法的做用:就是規定子類必須有這個方法,且將功能交給子類來處理,只寫出來方法的結構,而沒有實現(無方法體),具體的功能實現交給具體的子類根據本身的需求實現
抽象類:有一個抽象方法的類,就是抽象類
抽象類的做用:就是嚴格要求子類的結構,因此抽象類其實就是一個規範。
定義形式:
好好耕耘 PHP面向對象之接口 接口(interface)技術 什麼是接口? 先看抽象類: abstract class 類名 { 屬性1; 屬性2; ..... 非抽象方法1; 非抽象方法2; ...... 抽象方法1; 抽象方法2; ...... }
接口是一種特殊的抽象類
接口就是「比抽象類更抽象的」一種語法結構。
接口(interface)定義形式:
interface 接口名{ 常量1; 常量2; ..... 抽象方法1; 抽象方法2; ..... }
可見:接口幾乎本身什麼都沒作,就光讓別人作什麼。
說明:
1,可見,接口中,只有常量(接口常量)和抽象方法兩種成員;
2,接口常量的使用形式爲: 接口名稱::常量名稱;
3,接口中的抽象方法,不要使用abstract修飾,也不須要使用訪問控制修飾符,由於其自然就是public
面向對象編程思想是對「現實世界」的描述(模擬)! 現實世界每每都都是多繼承的; 但: 出於下降類跟類之間關係的複雜度的考慮,就將語言設計爲單繼承的; 但這樣,就沒法表達出現實世界的多繼承特性; 則: 接口就是對沒有多繼承的類之間關係的一個補充; 由於:接口能夠實現「多繼承」——但此時不稱爲繼承而已,而是稱爲「實現」; 即: 接口1 -->> 類1; 就稱爲:類1實現了接口1; 其本質,其實就是類1中,有了接口1中「特徵信息」;
形式爲:
class 類名 implements 接口名1, 接口名2, ....{ //類的定義。 }
這裏,叫作,類實現了接口。
implements,譯爲:實現。其本質其實和 extends 同樣,就是繼承;
其中,接口跟接口之間,也能夠繼承,跟類之間的繼承:
interface 接口1 extends 接口2{ //接口的成員定義;。。。。 }
一、 接口中的方法,必須所有是抽象方法,因此接口中的抽象方法不須要使用abstract關鍵字,直接用分號結束便可
二、 接口中的成員屬性,必須是常量(不能有變量)
三、 全部的方法必須所有是public
四、 聲明接口不適用class,而是使用interface
Tips:
一、可使用extends讓一個接口繼承另外一個接口,即經常使用的繼承(擴展新抽象方法),無覆蓋的關係
二、可使用一個類來實現接口中所有方法,也可使用一個抽象類,來實現接口中的部分方法
三、不要使用extends這個關鍵字,使用implements實現implements至關於extends
四、一個類能夠在繼承另外一個類的同時,使用implements實現一個接口,也能夠實現多個接口(必定要先繼承,再實現接口)
PHP中是「單一繼承(類),多實現(接口)」