php基礎 31 抽象類 介面的介紹

2021-10-10 13:34:40 字數 2180 閱讀 8688

抽象類

在實際開發中,我們可能有這樣一種類,是其他類的父類,但是它本身並不需要例項化,主要用途是用於讓子類來繼承,這樣可以達到**復用,同時利於專案經理/架構師/專案設計者來設計類,該類用abstract關鍵字來修飾,我們稱之為抽象類,同理用abstract來修飾的方法,稱之為抽象方法。

基本語法:

abstract class 類名

注意事項:

1、抽象類不能被例項化

2、抽象類不一定要包含abstract方法。也就是說抽象類可以沒有abstract方法

3、一旦類包含了abstract方法,則這個類必須宣告為abstract

4、抽象方法不能有函式體(包括大括號{})

5、如果乙個類繼承了某個抽象類,則它必須實現該抽象類的所有抽象方法(除非它自己也宣告為抽象類)

例如:

<?php

abstract class animal

abstract public function cry();

}//cat類要麼自己也宣告為抽象類,要麼實現從animal類繼承的所有抽象方法

class cat extends animal }

$p1=new cat();

$p1->cry();

?>

---------- 編譯結果 ----------

小貓叫喚

介面(inte***ce)

定義:介面是比抽象類更抽象的某種「結構」——它其實不是類,但是跟類一樣的某種語法結構,被稱為介面。

基本語法:

inte***ce 介面名

注意:介面的所有方法都不能有方法體

作用:介面就是給出一些沒有實現的方法,封裝到一起,到某個類要使用的時候,再根據具體情況把這些方法寫出來。簡而言之就是宣告一些方法供其他類來實現.

如何去實現介面:

基本語法:

class 類名 implements 介面名

小結:介面是更加抽象的抽象類,抽象類裡的方法可以有方法體,結口裡的所有方法都沒有方法體。介面體現了程式設計的多型和高內聚低耦合的設計思想

介面的細節:

1、介面不能被例項化

2、介面中所有的方法都不能有主體(包括大括號{})

3、乙個類可以實現多個介面,逗號隔開 

示例:public class 類名 implements 介面1,介面2

4、介面中可以有屬性,但必須是常量,並且預設是public

5、介面中的方法都必須是public的,預設就是public

6、乙個介面不能繼承其他的類,但是可以繼承別的介面

示例:inte***ce 介面名 extends 介面1,介面2

舉例,如何實現猴子除了繼承父親爬樹能力之外,還能會像鳥一樣飛,像魚一樣會游泳,**如下:

<?php

class monkey

}inte***ce ibirdable

inte***ce ifishable

class littlemonkey extends monkey implements ibirdable,ifishable

public function swimming()

}$littlemonkey=new littlemonkey();

$littlemonkey->climbing();

$littlemonkey->fly();

$littlemonkey->swimming();

?>

---------- 編譯結果 ----------

猴子會爬樹..猴子會飛...猴子會游泳...

實現介面和繼承類的討論:

php的繼承是單繼承,也就是乙個類最多只能有乙個父類,這種單繼承的機制可保證類的純潔性,比c++的多繼承制簡潔,但是不可否認,對子類功能的擴充套件有一定影響,所以我們認為:

1、實現介面可以看作是對繼承的一種補充,還有一點,繼承是層級式的,不太靈活,而介面就沒有這樣的麻煩,因為它只針對實現介面的類才起作用。

2、實現介面可在不打破繼承關係的前提下,對某個類功能拓展,非常靈活

PHP抽象類與介面的異同

抽象類與介面的異同 一 相同點 1.兩者都是抽象類,都不能例項化 2.inte ce實現類及abstract class的子類都必須要實現已經宣告的抽象方法 二 不同點 1.inte ce需要實現,要用implements,而abstract class需要繼承,要用extends 2.乙個類可以實...

PHP抽象類與介面的區別

不同點 對介面的使用方式是通過關鍵字implements來實現的,而對於抽象類的操作是使用類繼承的關鍵字exotends實現的。抽象類類似於乙個含義抽象方法的普通類。介面沒有資料成員,但是抽象類有資料成員,抽象類可以實現資料的封裝。介面沒有建構函式,抽象類可以有建構函式。介面中的方法都是public...

PHP抽象類與介面的區別

首先,看看什麼是抽象類和介面 抽象類 定義為抽象的類不能被例項化.任何乙個類,如果它裡面至少有乙個方法是被宣告為抽象的,那麼這個類就必須被宣告為抽象的。被定義為抽象的方法只是宣告了其呼叫方式 引數 不能定義其具體的功能實現。繼承乙個抽象類的時候,子類必須定義父類中的所有抽象方法 另外,這些方法的訪問...