1. 程式人生 > >php 介面 & 抽象類

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中是“單一繼承(類),多實現(介