方法的重寫/方法的覆蓋(override)
當一個父類知道所有的子類都有一個方法,但是父類不能確定該方法究竟如何寫,
可以讓子類去覆蓋這個方法,具體用法如下:
<?php
//抽象一個Animal類
class Animal{
public $name;
protected $price;
function cry(){
echo "不知道動物怎麼叫..";
echo "
";
}
}
class Dog extends Animal{
//覆蓋父類中的 cry()方法
function cry(){
echo "小狗汪汪叫..";
echo "
";
}
}
class Pig extends Animal{
//覆蓋父類中的 cry()方法
function cry(){
echo "小豬哼哼叫..";
echo "
";
}
}
//創建一個只狗
$animal=new Animal();
$animal->cry();
$dog1=new Dog();
$dog1->cry();
$pig1=new Pig();
$pig1->cry();
?>
關於方法重寫細節討論:
方法重寫就是子類有一個方法,和父類的某個方法的名稱、參數個數一樣,那麼我們就說子類的這個方法重寫了父類的那個方法。
1. 要實現重寫,要求 子類的那個方法的名字和參數個數一摸一樣,但是並不要求參數的名稱一樣.
2. 如果子類要去調用父類的某個方法(public / protected) 則可以使用 parent::方法名(參數..) , 父類名::方法名(參數...)
3. 在實現方法覆蓋的時候,訪問修飾符可以不一樣 //但是必須滿足: 子類的訪問范圍>=父類的訪問范圍
注意:當父類的函數為私有(private)類型時,不能覆蓋,因為父類為私有該函數根本不能繼承。
// 當子類沒有覆蓋父類的方法則 $cat1->cry() 調用的是父類,當 子類覆蓋了父類的方法,則調用自己的cry()