1. 程式人生 > >PHP中類的繼承特性之方法的過載(覆蓋)

PHP中類的繼承特性之方法的過載(覆蓋)

<?php
/*類的繼承特性之過載(也叫覆蓋):
1.說的意思指的是子類可以重新定義一個和父類相同名字的方法,從而覆蓋掉原來父類的方法,加上自己新新增的功能;
2.若原封不動的覆蓋容易造成程式碼的重複(因為又得重新在子類中寫一次原來父類中本來就有的功能),所以可以用"父類名::
父類方法()"的形式來輸出原來父類本來就有的功能,這樣就可以實現子類功能的擴充套件;
3.物件訪問成員用"->",而類訪問成員用"::";
4.由於父類名稱可能改變,所以子類覆蓋父類中的方法時可以採用關鍵字parent來代替父類名稱使用,便於後期程式設計的修改;
5.若子類去覆蓋父類中的構造方法,一定要在構造方法的最上面先呼叫一下父類的構造方法;
6.許可權的問題:子類的許可權一定要大於等於父類的許可權,比如父類中成員方法為public時,子類繼承過來的成員方法只能為public;
而父類中成員方法為protected時,子類中繼承的許可權只能為protected或者public
*/

class person{
protected $name;
protected $age;
public $sex;
function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
//父類中say()方法的許可權為protected
protected function say(){
echo "我的名字是{$this->name},我的年紀是:{$this->age},我的性別為:{$this->sex}<br>";
}
function eat(){

}
function run(){

}
}
class student extends person{
var $school;
function __construct($name,$age,$sex,$school){
parent::__construct($name,$age,$sex);
$this->school=$school;
}
//父類為protected,子類中繼承的方法的許可權則只能為public或者protected

protected function say(){
parent::say();
echo "我所在的學校是{$this->school}";
}
function study(){
$this->say();
echo "111111111";
}
}
$stu=new student("劉仁","20","男","大梁工業大學");
$stu->study();
?>