標籤:style blog color 使用 io strong 資料 ar div
一.特點:
1、抽象類別特點
(1) 用 abstract 來修飾一個類,那麼這個類就是抽象類別;抽象類別絕對不能被執行個體化,即$abc = new 抽象類別名();會報錯。(2) 用abstract 來修飾一個方法,那麼該方法就是抽象方法;(3) 如果類中有一個抽象方法,那麼該類就必須定義為抽象類別;但反過來,抽象類別裡並不一定要有抽象方法。另外,抽象類別裡也可以有普通方法。(4) 抽象方法不能有方法體。即abstract function abc();------後面不能加大括弧{.........}。(5)、一個類繼承了某個抽象類別,那麼,它必須實現抽象類別中所有的抽象方法(除非,它也這些抽象方法聲明為抽象的,相當於抽象類別繼承了抽象類別)。
2、介面的特點
(1) 介面的方法必須是公開的。
(2) 介面的方法預設是抽象的,所以不在方法名前面加abstract。
(3) 介面可以定義常量,但不能定義成員屬性,常量的定義和用法和類中常量一樣。
(4) 類可以實現多個介面(用逗號隔開)
(5) 介面也可以繼承介面。
二. 區別:
1、對介面的使用是通過關鍵字implements。對抽象類別的使用是通過關鍵字extends。當然介面也可以通過關鍵字extends繼承。
2、介面中不可以聲明成員變數(包括類靜態變數),但是可以聲明類常量。抽象類別中可以聲明各種類型成員變數,實現資料的封裝。
3、介面沒有建構函式,抽象類別可以有建構函式。
4、介面中的方法預設都是public類型的,而抽象類別中的方法可以使用private,protected,public來修飾。
5、一個類可以同時實現多個介面,但一個類只能繼承於一個抽象類別。
三 .選擇:
- 如果要建立一個模型,這個模型將由一些緊密相關的對象採用,就可以使用抽象類別。如果要建立將由一些不相關對象採用的功能,就使用介面。
- 如果必須從多個來源繼承行為,就使用介面。
- 如果知道所有類都會共用一個公用的行為實現,就使用抽象類別,並在其中實現該行為。
四.樣本:
abstract class people{var $name;abstract function sayName();}interface mother{function beautiful();}interface father{function clever();}class son extends people implements mother,father{function beautiful(){echo "i‘m very beautiful!";}function clever(){echo "i‘m very clever!";}function __construct($name){$this->name = $name;}function sayName(){echo $this->name;}}$zww = new son("Tom");$zww->beautiful();$zww->clever();$zww->sayName();
輸出結果:i‘m very beautiful!i‘m very clever!Tom
php中抽象類別和介面的特點、區別和選擇