PHP面向對象特性-多態

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