抽象類就是一個(gè)普通的類,區(qū)別是抽象類中申明了一些函數(shù)挫望,這些函數(shù)的功能必須由子類來實(shí)現(xiàn)殴蓬。
抽象類不能實(shí)例化匿级。
任何一個(gè)類,只要其中有一個(gè)方法被定義為抽象的染厅,那么這個(gè)類就必須是抽象的痘绎。
抽象類中可以沒有抽象方法,但這樣就沒有意義了肖粮。
被定義為抽象的方法只能進(jìn)行聲明(如名稱孤页、參數(shù)、返回值)涩馆,但不能有函數(shù)體行施。
繼承一個(gè)抽象類時(shí),子類必須實(shí)現(xiàn)父類中的所有抽象方法魂那,且這些方法訪問級別必須和父類中一樣或是級別更大蛾号。
實(shí)現(xiàn)父類方法時(shí),參數(shù)和返回值必須一致冰寻,允許增加有默認(rèn)值的參數(shù)须教。
// 抽象類
abstract class Foo{
// 抽象方法不能有函數(shù)體
abstract protected function hello(int $i, string $s) : int;
abstract protected function world(bool $b, float $f);
abstract protected function temp(int $i);
// 普通方法可以有函數(shù)體
protected function fn(){
echo "父類的普通方法<br />";
}
}
// 子類
class Bar extends Foo{
// 參數(shù)必須和父類一樣
protected function hello(int $i, string $s) : int{
echo "子類的hello方法 <br />";
}
// 訪問級別可以更大、也可以增加一個(gè)有默認(rèn)值的參數(shù)
public function world(bool $b, float $f, int $i = 123){
echo "子類的world方法 <br />";
}
// 子類的參數(shù)可以設(shè)置默認(rèn)值
public function temp(int $i = 123){
// 子類實(shí)現(xiàn)的方法必須有函數(shù)體
}
// 普通方法重寫
public function fn(){
echo "子類的普通方法<br />";
}
}