* 抽象類 * 1.使用關鍵字: abstract
* 2.類中只要有一個方法聲明為abstract抽象方法,那么這個類就必須聲明為抽象類 * 3.抽象方法只允許有方法聲明與參數列表,不允許有方法體; * 4.因為抽象方法的不確定性,所以抽象類禁止實例化,僅允許通過繼承來實例化; * 5.繼承抽象類的子類中,必須將抽象類中的所有抽象方法全部實現 * 6.子類成員的訪問限制級別必須等於或小於抽象類的約定,例如抽象類是protected,子類必須是 * protected 或者 public 不允許是private * 7.子類方法參數必須與抽象類方法參數完全一致,但允許增加默認參數 * 特別注意 * 1. 盡管抽象類不能實例化,但仍然可以為它創建構造器,但必須聲明為final * 2. 抽象類理論上說不應該擁有靜態成員,部分編輯器會有E_STRICT2048提示,但仍然可以這樣做
abstract class Fruits
{
//水果名稱
protected $name;
//聲明靜態屬性,因為要用到靜態類中
// protected static $name;
//抽象方法
abstract public function eat();
//靜態抽象方法
// abstract static public function eat();
//盡管不能直接實例化抽象類,但仍然可以有構造方法
public function __construct()
{
return '抽象類構造器,實例化時自動調用<br>';
}
}
//實際開發中應該為每一個類創建獨立的類文件
class Apple extends Fruits
{
protected $name = '蘋果';
//聲明為靜態屬性
// public static $name = '蘋果';
public function eat()
{
return $this->name.'可以直接生吃';
}
//子類構造方法
public function __construct()
{
echo parent::__construct();
}
//實現抽象類中的抽象靜態方法eat()
// public static function eat()
// {
// return self::$name.'可以直接生吃';
// }
}
$apple = new Apple;
echo $apple->eat();
//此前是抽象靜態類,不需要例化,可以用類直接訪問
//echo Apple::eat();