PHP面向對象特性-繼承

1、繼承
定義:繼承是從一個基類得到一個或多個類的機制。
關鍵字:extends
注: PHP只支持單繼承,不支持方法重載。
2、例子

class Computer{
        public $_name = '聯想';
        public function _run(){
            echo '聯想在運行';
        }
    } 
    class NoteComputer extends Computer{

    }
    $notecomputer = new NoteComputer();
    echo $notecomputer->_name;
    $notecomputer->_run();

3、重寫

    class Computer{
        public $_name = '聯想';
        public function _run(){
            echo '聯想在運行';
        }
    } 
    class NoteComputer extends Computer{
    //我不需要父類的字段和方法,可以採用重寫的方法覆蓋
        public $_name = 'DELL';
        public function _run(){
            echo 'DELL 在運行。';
        }
    }
    $notecomputer = new NoteComputer();
    echo $notecomputer->_name;
    $notecomputer->_run();

4、protected
父類私有化時,無法被子類繼承,這個時候應該用受保護的(protected )修飾符。

class Computer{
        protected $_name = '聯想';
        protected function _run(){
        echo '聯想在運行';
        }
    } 
    class NoteComputer extends Computer{
        public function getTop(){
            echo $this->_name;
            echo $this->_run();
        }
    }
    $notecomputer = new NoteComputer();
    $notecomputer->getTop();

5、重寫調用父類方法
子類已經覆蓋父類字段和方法,還想調用父類該怎麼辦?

    class Computer{
        public $_name = '聯想'; //字段無法調用
        public function _run(){
            echo '聯想在運行';
        }
    } 

    class NoteComputer extends Computer{
        public $_name = 'DELL';
        public function _run(){
            echo 'DELL 在運行。';
            //調用父類的兩種方法
            echo Computer::_run();
            echo parent::_run();
        }
    }
    $notecomputer = new NoteComputer();
    echo $notecomputer->_name;
    $notecomputer->_run();

6、final關鍵字

    //final 如果加在類前 表示不能被繼承
    final class Computer{
    } 
    class NoteComputer extends Computer{
    }
    class Computer{
    //final 加在方法前,表示不能被重寫
    final public function _run()
    }
    class NoteComputer extends Computer{
    }

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