「覆寫」(override)指的是子類別把繼承自父類別的方法重新定義,在這個過程中,父類別的方法並不會受到影響。透過覆寫的技巧可以實作物件導向程式設計的「多型」(polymorphism)。
下面程式碼是子類別覆寫父類別的範例:
<?php
class Pay //父類別
{
public $Name; //定義屬性(可以被繼承)
public function Payment($Hours, $PayRate) //定義方法(可以被繼承)
{
return $Hours * $PayRate;
}
}
class Bonus extends Pay //子類別繼承父類別Pay
{
public function Payment($Hours, $PayRate) //覆蓋父類別的方法
{
return $Hours * $PayRate + 5000;
}
}
$Obj1 = new Pay(); //呼叫父類別的方法
$Obj2 = new Bonus(); //呼叫子類別的方法
echo '原本的薪資為'.$Obj1->Payment(100, 80).'<br>'; //輸出$Obj1
echo '加上獎金之後的薪資為'.$Obj2->Payment(100, 80).'<br>'; //輸出$Obj2
?>
執行結果:
原本的薪資為8000
加上獎金之後的薪資為13000
呼叫父類別內被覆寫的方法
以上面的例子來舉例:
public function Payment($Hours, $PayRate) //覆蓋父類別的方法
{
return $Hours * $PayRate + 5000;
}
紅字重覆的部份可以改為
public function Payment($Hours, $PayRate)
{
return parent::Payment($Hours,$PayRate) + 5000;
}
parent 關鍵字代表目前所在子類別的父類別,透過這個關鍵字,就可以呼叫父類別內被覆蓋的方法,也可以直接指定父類別的名稱,如下舉例
public function Payment($Hours, $PayRate)
{
return Pay::Payment($Hours,$PayRate) + 5000;
}
留言列表