Php物件導向 -- 抽象類別
抽象類別abstract:
有一種類,只能被繼承,不能執行個體化對象。原因就是這個類的定義不完整。
因為php支援定義一種,只有方法的聲明部分,而沒有方法的實現部分的不完整方法。
如果某個類,包含了這種不完整的方法,就不是不完整類,也就不能執行個體化對象。
不完整的類,稱之抽象類別
所包含的不完整的方法,稱之抽象方法。
定義:
包含抽象方法的類,就是抽象類別。
文法:
定義抽象方法,利用abstract的關鍵字,告知php那個方法為抽象方法
如果一個類包含一個抽象方法,也就是抽象類別,因此也需要使用abstract關鍵字聲明
例子:
abstract class Goods
{
public $goods_name;
public $shop_price;
public function __construct($name,$price)
{
$this->goods_name= $name;
$this->shop_price= $price;
}
//抽象方法
abstract public function sayName();
}
class GoodsBook extends Goods
{
public $pages;
public function __construct($name,$price,$pages)
{
parent::__construct($name,$price);
$this->pages= $pages;
}
// 繼承抽象類別的子類要實現抽象類別中的 抽象方法
public function sayName()
{
echo$this->goods_name;
}
}
抽象類別沒有執行個體化對象的能力,只有被繼承的能力。
如果繼承某個抽象類別的類是非抽象類別的話,就一定要將不完整的抽象方法實現,否則該類也應該是一個抽象類別。
註:子類中實現抽象類別的抽象方法時,方法名、參數要一致,存取權限要弱於抽象類別的存取權限。
例子:
abstruct class Goods
{
abstruct protected function sayName();
}
class GoodsBook extends Goods
{
public function sayName()
{
}
}
抽象類別功能總結:
在可以為子類提供公用操作的同時,限制子類所用有得方法的結構。
犧牲了執行個體化對象的功能。