1、抽象類和方法
創建一個抽象類 在class前面加上abstract。
抽象類不能被實例化。
只要類裏面有一個抽象方法,那麼這個類必須是抽象類,類前必須加上abstract。
abstract class Computer{
//在抽象類裏創建一個普通方法
//抽象方法不能夠實現方法體的內容
abstract public function _run();
public function _run2(){
echo '我是父類的普通方法';
}
}
//抽象類是用來給子類來繼承的,實現一種資源和規範的共享。
class NoteComputer extends Computer{
//抽象類裏的抽象方法,子類必須重寫,不然會報錯。
//抽象類裏的普通方法不需要重寫,子類會直接繼承。
public function _run(){
echo '我是子類的方法';
}
}
$notecomputer = new NoteComputer();
$notecomputer->_run2();
2、接口
特殊的抽象類。
到底應該用抽象類還是接口呢?
如果你要繼承多個類的方法規範,那麼就用接口就好了。
如果你要共享一個方法體內容,就用抽象類。
類不能實現多繼承,只支持單繼承,但是接口可以。
作用:規範他們的子類,以達到一致目的。
interface Computer{
//成員字段必須是常量
const NAME = '聯想 ';
//接口裏的所有方法都是抽象方法,不能夠寫方法體
public function _run();
public function _run2();
}
interface Computer2{
public function _run3();
}
//子類繼承接口的說法,叫做實現,接口可以多實現。
class NoteCompuyer implements Computer{
public function _run(){
echo '我重寫了run';
}
public function _run2(){
echo '我重寫了run2';
}
public function _run3(){
}
}
3、多態
字面意思:多種形態。
一個動作由不同的人去執行產生不同的效果
一個人通過不同的狀態去執行同一個動作形成的不同的動作。
多態的原理:就是類都寫好了,不要去修改它,只要在類外調用參數修改。而最後的結果也會得到更改,這就是類的多態。
interface Computer{
public function version();//表示用什麼電腦
public function work();//電腦如何運行
}
class NoteComputer implements Computer{
public function version(){
echo '筆記本';
}
public function work(){
echo '可以便攜式運行Win7';
}
}
class DesktopComputer implements Computer{
public function version(){
echo '臺式機';
}
public function work(){
echo '在工作站運行XP';
}
}
//創建一個用戶
class Person{
//創建一個方法來接受電腦
//將他們的對象傳進來
public function _run($type){
$type->version();
$type->work();
}
}
//有 一個接口 兩個類
$notecomputer = new NoteComputer();
$desktopcomputer = new DesktopComputer();
$person = new Person();
//通過傳不同的參數來得到不同的結果
$person->_run($notecomputer);
//結果:筆記本可以便攜式運行Win7
$person->_run($desktopcomputer);
//結果:臺式機在工作站運行XP