PHP學習——23 PHP面向對象(類的繼承與多態:extends與方法重寫)

首先介紹幾個概念:
1. 範圍解析操作符 (::)或者更簡單地說是一對冒號,可以用於訪問靜態成員,類常量,還可以用於覆蓋類中的屬性和方法。
2. 繼承:當擴展一個類,子類就會繼承父類所有公有的和受保護的方法。除非子類覆蓋了父類的方法,被繼承的方法都會保留其原有功能。
3. 多態的應用:父類對象的引用指向子類對象,其實本質上就是一個向上轉型。

例子:老闆(boss 對象)對員工說都回去工作(調用函數sayGotoDo函數),這是所有的員工(會計員、程序員、行政人員)都會響應該函數事件,去工作(執行子類的工作事件,doCaculate、doProgram、doWork...),但是每個工作事件都不一樣,這就是多態,父類的函數執行具體到子類執行時,是不盡相同的。

<?php 
class Person
{
	protected $name;//protected:受保護的,外部不可見,只允許內部和子類訪問
	protected $age;
	protected $salary;

	public function __construct($name,$age,$salary){
		$this->name = $name;
		$this->age = $age;
		$this->salary = $salary;
	}

	// public function getMsg(){
	protected function getMsg(){ // 聲明爲protected,這樣就只能被子類繼承,子類繼承後還是protected
		return '我的名字是:'.$this->name.',年齡是:'.$this->age.',薪資是:'.$this->salary;
	}
}
// $person = new Person('Peter',33,4000);
// echo $person->getMsg().'<br>';
// 我的名字是:Peter,年齡是:33,薪資是:4000

// 聲明一個子類(擴展類),繼承使用關鍵字extends,php是單繼承語言
// 創建子類是爲了擴展父類的功能,實現代碼的複用
class Employee extends Person
{
	protected $department;// 部門
	public function __construct($name,$age,$salary,$department){
		parent::__construct($name,$age,$salary);
		// $this->name = $name;
		// $this->age = $age;
		// $this->salary = $salary;
		$this->department = $department;
	}
	// 重寫getMsg方法,在子類中重寫父類方法,其訪問權限不能低於原來的,原來是protected,那麼現在應該是public
	public function getMsg(){
	// protected function getMsg(){ // 聲明爲protected,這樣就只能被子類繼承,子類繼承後還是protected
		// return '我的名字是:'.$this->name.',年齡是:'.$this->age.',薪資是:'.$this->salary.',部門是:'.$this->department;
		return parent::getMsg().',部門是:'.$this->department;
	}
}

$person = new Employee('Charry',53,30000,'開發部');
echo $person->getMsg().'<br>';
// 我的名字是:Charry,年齡是:23,薪資是:30000,部門是:開發部

?>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章