定義 :
定義為抽象的類不能被實例化。任何一個類颖御,如果它里面至少有一個方法是被聲明為抽象的榄棵,那么這個類就必須被聲明為抽象的。被定義為抽象的方法只是聲明了其調(diào)用方式(參數(shù))潘拱,不能定義其具體的功能實現(xiàn)疹鳄。
繼承一個抽象類的時候,子類必須定義父類中的所有抽象方法芦岂;另外瘪弓,這些方法的訪問控制必須和父類中一樣(或者更為寬松)。例如某個抽象方法被聲明為受保護(hù)的禽最,那么子類中實現(xiàn)的方法就應(yīng)該聲明為受保護(hù)的或者公有的腺怯,而不能定義為私有的。此外方法的調(diào)用方式必須匹配弛随,即類型和所需參數(shù)數(shù)量必須一致瓢喉。例如宁赤,子類定義了一個可選參數(shù)舀透,而父類抽象方法的聲明里沒有,則兩者的聲明并無沖突决左。 這也適用于 PHP 5.4 起的構(gòu)造函數(shù)愕够。在 PHP 5.4 之前的構(gòu)造函數(shù)聲明可以不一樣的。
1. 抽象方法實現(xiàn)的訪問級別必須小于抽象類中的方法
2. 不能被實例化(不能用new來創(chuàng)建對象)
3. 被生命方法不能包含函數(shù)體
4. 擴(kuò)展類也為抽象類佛猛,就不用實現(xiàn)所有的抽象函數(shù)
//shape為圖形類惑芭,F(xiàn)ourSidesShape為正方形,TreeSidesShape為三角形
//include_once("constant.php");
//shape為圖形類继找,F(xiàn)ourSidesShape為正方形遂跟,TreeSidesShape為三角形
abstract class Shape {
abstract public function getArea();
abstract public function getLength();
public function getType(){
}
}
class FourSidesShape extends Shape{
private $width;
private $heigth;
public function __construct($width,$height){
$this->width = $width;
$this->height = $height;
}
public function getArea(){
$area = $this->width * $this->height;
echo "面積:".$area;
}
public function getLength(){
$length = ($this->width+$this->height)*2;
echo "周長:".$length;
}
}
abstract class TreeSidesShape extends Shape{
}
/*試著new 一個 Shape,是否成功
$shape = new Shape();
*/
/*
1 試著注釋掉 getArea方法
2 將getArea方法變?yōu)樗接?/p>
3 將Shape類中g(shù)etArea加一個空函數(shù)體
4 注釋掉 Shape類中的 getArea 和 getLength方法
5
*/
/* 成功例子*/
$fShape = new FourSidesShape(10,20);
$fShape->getArea();
// $sShape = new TreeSidesShape();