php 接口 & 抽象類

概述


抽象類是一種特殊的類,而接口是一種特殊的抽象類編程

抽象方法


抽象類是一種特殊的類設計

定義:一個方法若是沒有方法體,則這個方法就是抽象方法。(沒有方法體的方法叫抽象方法)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中是「單一繼承(類),多實現(接口)」

相關文章
相關標籤/搜索