抽象類
在實際開發中,我們可能有這樣一種類,是其他類的父類,但是它本身並不需要例項化,主要用途是用於讓子類來繼承,這樣可以達到**復用,同時利於專案經理/架構師/專案設計者來設計類,該類用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抽象類與介面的區別
首先,看看什麼是抽象類和介面 抽象類 定義為抽象的類不能被例項化.任何乙個類,如果它裡面至少有乙個方法是被宣告為抽象的,那麼這個類就必須被宣告為抽象的。被定義為抽象的方法只是宣告了其呼叫方式 引數 不能定義其具體的功能實現。繼承乙個抽象類的時候,子類必須定義父類中的所有抽象方法 另外,這些方法的訪問...