1-7(OOP)PHP抽象類和抽象方法

如果定義的類範圍太大太抽象就沒法具體到某類,那麼實例化出來到底是哪一種。比如定義動物這個類,實例化就毫無意義,我們不清楚到底是什麼動物。

 

既然父類實例化沒有意義,那麼可以規定在寫父類的時候規定這個父類不能被直接實例化,必須被其他類繼承之後再去實例化子類

1. 規定一個類爲‘抽象類’  

     abstract class 類名稱{

      }

      這個抽象類是用來被其他類繼承擴展的

2. 還有個概念叫抽象方法

    abstruct[可見性]  function 方法名([....]);

    不需要定義方法的具體功能,具體功能由子類完成

    注: 

  • 在擴展類的抽象方法時,可見性必須高於或等於抽象方法定義的可見性
  •  參數要一致
  • 類裏面如果有抽象方法那麼這個類本身必須要定義爲抽象類,換句話說,只有抽象類裏纔可以包含抽象方法
  • 抽象類不一定要有抽象方法
<?php
/* 
 * 抽象類:
 * 從語法上限制某個類不能被直接實例化,
 * 限制一個父類不能被直接實例化
 */

header('Content-Type:text/html;charset=utf-8');
//抽象類
abstract class Humanity {
	public $name;
	public $sex;
	public $iq=10;
	const BIRTHPLACE='地球';
	static public $counter=0;//靜態屬性,它是公共的資源和具體的實例沒有關係
	//構造函數
	public function __construct($name,$sex){
		self::$counter++;
		$this->name=$name;
		$this->sex=$sex;
	}
	protected function chew($food){
		echo "<p>{$food}已經被咀嚼完成!</p>";
	}
	//抽象方法
	abstract public function eat($food);
	static public function hello(){
		echo '<p>您好!我是來自'.self::BIRTHPLACE.'的人類</p>';
	}
}
class Student extends Humanity {
	const BIRTHPLACE='火星';
	public $studentId;
	public function test($subject){
		echo "<p>{$this->name}正在考{$subject}!</p>";
	}
	public function eat($food){
		$this->chew($food);
		echo "<p>{$this->name}正在快速的喫{$food}!</p>";
	}
}
class Worker extends Humanity {
	public function eat($food){
		$this->chew($food);
		echo "<p>{$this->name}正在的喫{$food}!</p>";
	}
}

$hanMM=new Student('韓梅梅','女');

     

 

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