php 介面 & 抽象類
概述
抽象類是一種特殊的類,而介面是一種特殊的抽象類
抽象方法
抽象類是一種特殊的類
定義:一個方法如果沒有方法體,則這個方法就是抽象方法。(沒有方法體的方法叫抽象方法)
1、 一個方法沒有方法體(也沒有花括號),直接用分號結束的方法; 2、 如果是抽象方法,必須使用abstract抽象關鍵字形容
注意:
-
1、只要有abstract修飾的類就是抽象類
-
2、除了在抽象類中可以有抽象方法之外,和正常的類完全一樣
-
3、抽象類不能例項化物件
-
4、如果抽象類有子類,如果子類要想能被例項化,則子類必須重寫(實現)父類中全部的抽象方法,否則這個子類不能被例項化,如果只是實現部分,那麼這個子類還是抽象類
實現父類中的方法,什麼叫“實現”,就是具體實現,要包含有方法體
抽象方法的作用:就是規定子類必須有這個方法,且將功能交給子類來處理,只寫出來方法的結構,而沒有實現(無方法體),具體的功能實現交給具體的子類根據自己的需求實現
抽象類
抽象類:有一個抽象方法的類,就是抽象類
抽象類的作用:就是嚴格要求子類的結構,所以抽象類其實就是一個規範。
定義形式:
好好耕耘 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{
//介面的成員定義;。。。。
}
比較
1、 介面中的方法,必須全部是抽象方法,所以介面中的抽象方法不需要使用abstract關鍵字,直接用分號結束即可
2、 介面中的成員屬性,必須是常量(不能有變數)
3、 所有的方法必須全部是public
4、 宣告介面不適用class,而是使用interface
Tips:
1、可以使用extends讓一個介面繼承另一個介面,即常用的繼承(擴充套件新抽象方法),無覆蓋的關係
2、可以使用一個類來實現介面中全部方法,也可以使用一個抽象類,來實現介面中的部分方法
3、不要使用extends這個關鍵字,使用implements實現implements相當於extends
4、一個類可以在繼承另一個類的同時,使用implements實現一個介面,也可以實現多個介面(一定要先繼承,再實現介面)
類和介面的大總結
PHP中是“單一繼承(類),多實現(介