1. 程式人生 > >PHP類繼承、接口繼承關系概述

PHP類繼承、接口繼承關系概述

con ted 概述 類型 類繼承 trac 派生 直接 5.6

PHP類繼承:

  1. PHP類不支持多繼承,也就是子類只能繼承一個父類,但是支持多層次繼承,比如:

     1 class frist{
     2     public function __construct(){
     3         echo "我是第一個類。","<br>";
     4     }
     5     public function printer(){
     6         echo "frist","<br>";
     7     }
     8 }
     9 class seconds extends frist{}
    10 class third extends seconds{}
    
    11 $obj = new third(); 12 $obj->printer();

    結果:這是第一個類。 frist 第二個類和第三個類沒有重寫printer()方法,第三個類實例化後可以調用printer()方法。

  2. 繼承權限問題 2.1 父類private方法不可被繼承,父類私有化 2.2 父類protected方法可以被繼承,但不能被實例化對象調用,如果調用會出現" Call to protected method frist::printer()"的報錯,父類對此方法置於保護模式下 2.3 父類public方法可以被繼承、可以被實例化對象調用,屬於公開方法 2.4 子類可重寫父類public或者protected的方法,不能重新private的方法,如果同名只是在本類重新聲明

  3. 接口類繼承 3.1 接口支持多繼承,接口類的方法不需要實現比如:

     1 interface frist{
     2     public function ex1();
     3 }
     4 interface seconds{
     5     public function ex2();
     6 }
     7 interface third extends frist,seconds{
     8     public function ex3();
     9 }
    10 class fourth implements third{
    11     public function ex1(){}
    12     public
    function ex2(){} 13 public function ex3(){} 14 } 15 16 class fourth implements frist,seconds{ 17 public function ex1(){} 18 public function ex2(){} 19 }

    3.2 接口類的方法權限都是public,默認public 3.3 引用接口的類必須實現接口的所有方法,否則會報錯,比如:"Class e contains 1 abstract method and must therefore be declared abstract or implement the remaining methods",即:e類包含1個抽象方法,因此必須聲明抽象或實現其余方法。

  4. 抽象類:只要一個類裏面有一個方法是抽象方法,那麽這個類就要定義為抽象類

    4.1 抽象類繼承抽象類不能重寫父類方法。

   4.2 抽象類繼承是對父類的方法的拓展。

   4.3 繼承的派生類當中要把所有抽象方法重載才能實例化。

   4.4 抽象類實現的普通發放,可以在非抽象子類中直接調用。

  5. 接口和抽象類的異同點(引用抽象類與接口區別)

   5.1 對接口的使用方式是通過關鍵字implements來實現的,而對於抽象類的操作是使用類繼承的關鍵字exotends實現的

   5.2 接口沒有數據成員,但是抽象類有數據成員,抽象類可以實現數據的封裝。

   5.3 接口沒有構造函數,抽象類可以有構造函數。

   5.4 接口中的方法都是public類型,而抽象類中的方法可以使用private、protected或public來修飾。

   5.5 一個類可以同時實現多個接口,但是只能實現一個抽象類。

   5.6 相同點:函數體內不能寫任何東西,比如:function getName();即可。

原創帖,轉載請註明出處~

PHP類繼承、接口繼承關系概述