7.7 抽象類

抽象類就是一個普通的類,區別是抽象類中申明了一些函數,這些函數的功能必須由子類來實現。

抽象類不能實例化。

任何一個類,只要其中有一個方法被定義為抽象的,那么這個類就必須是抽象的。

抽象類中可以沒有抽象方法,但這樣就沒有意義了。

被定義為抽象的方法只能進行聲明(如名稱、參數、返回值),但不能有函數體。

繼承一個抽象類時,子類必須實現父類中的所有抽象方法,且這些方法訪問級別必須和父類中一樣或是級別更大。

實現父類方法時,參數和返回值必須一致,允許增加有默認值的參數。

// 抽象類
abstract class Foo{
    // 抽象方法不能有函數體
    abstract protected function hello(int $i, string $s) : int;
    abstract protected function world(bool $b, float $f);
    abstract protected function temp(int $i);
    // 普通方法可以有函數體
    protected function fn(){
        echo "父類的普通方法<br />";
    }
}

// 子類
class Bar extends Foo{
    // 參數必須和父類一樣
    protected function hello(int $i, string $s) : int{
        echo "子類的hello方法 <br />";
    }
    // 訪問級別可以更大、也可以增加一個有默認值的參數
    public function world(bool $b, float $f, int $i = 123){
        echo "子類的world方法 <br />";
    }
    // 子類的參數可以設置默認值
    public function temp(int $i = 123){
        // 子類實現的方法必須有函數體
    }
    // 普通方法重寫
    public function fn(){
        echo "子類的普通方法<br />";
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容