PHP物件導向——介面和多態性

來源:互聯網
上載者:User
前言今天查看本科生c++試卷的時候,發現還是有同學學習過c++之後,卻對物件導向的3大特性都不瞭解,這裡用php解釋一下介面和多態性,也當作是一種自我學習吧介面PHP類是單繼承,也就是不支援多繼承,當一個類需要多個類的功能時,繼承就無能為力了,為此PHP引入了介面技術如果一個抽象類別裡面的所有方法都是抽象方法,且沒有聲明變數,而且介面裡面所有的成員都是public許可權的,那麼這種特殊的抽象類別就叫介面介面使用interface關鍵字定義,並使用implements來實現介面的方法,且必須完全實現抽象類別和介面的區別介面是一個特殊的抽象類別,也可以看作是一個模型的規範。介面與抽象類別大致區別如下:
  1. 一個子類如果implements一個介面,就必須實現介面中的所有方法(不管是否需要);如果繼承一個抽象類別,只需要實現需要的方法即可
  2. 如果一個介面中定義的方法名改變了,那麼所有實現此介面的子類需要同步更新方法名;而抽象類別中如果方法名改變了,其子類對應的方法名將不受影響,只是變成了一個新的方法而已
  3. 抽象類別只能單繼承,當一個子類需要實現的功能需要繼承多個父類時,就必須使用介面
程式碼範例
<?php/** * 聲明介面Demo * @author wzy * */interface Demo{    const NAME = "wangzhengyi";    const AGE = 25;    function fun1 (); // 聲明方法預設是public abstract    function fun2 ();}/** * 聲明介面的繼承Demo2 * * @author wzy *         */interface Demo2 extends Demo{    function fun3 ();    function fun4 ();}/** * 聲明介面Demo3 * * @author wzy *         */interface Demo3{    function fun5 ();    function fun6 ();}/** * 聲明父類ParentClass * * @author wzy *         */class ParentClass{    function fun7 ();}/** * 子類必須實現介面中所有的方法 *  * @author wzy *         */class ChildClass extends ParentClass implements Demo2, Demo3{    function fun1 ();    function fun2 ();    function fun3 ();    function fun4 ();    function fun5 ();    function fun6 ();}
多態性多態性是物件導向設計的重要特性,它展現了動態綁定(dynamic binding)的功能,也成為“同名異式”。多態的功能可以讓軟體在開發和維護時,達到充分的延伸性(extension)通俗理解多態最直接的定義就是讓具有繼承關係的不同類對象,可以對相同名稱的成員函數調用,產生不同的反應結果多態的代碼
<?php/** * 聲明介面Demo * @author wzy * */interface Demo{    const NAME = "wangzhengyi";    const AGE = 25;    function fun1 (); // 聲明方法預設是public abstract    function fun2 ();}class One implements Demo{    public function fun1 ()    {        echo Demo::NAME . "就讀於中國傳媒大學";    }    public function fun2 ()    {        echo Demo::NAME . "的年齡是" . Demo::AGE;    }}class Two implements Demo{    public function fun1 ()    {        echo Demo::NAME . "在北京靈創眾和科技有限公司實習中";    }    public function fun2 ()    {        echo Demo::NAME . "去年的年齡是24";    }}// 同一個介面,實現同一個方法,不同的對象,反應結果不同。這就是多態的表現和應用$one = new One();$one->fun1(); // wangzhengyi就讀於中國傳媒大學$one->fun2(); // wangzhengyi的年齡是25echo "<br>";$two = new Two();$two->fun1(); // wangzhengyi在北京靈創眾和科技有限公司實習中$two->fun2(); // wangzhengyi去年的年齡是24

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.