PHP類繼承、介面繼承關係概述
PHP類繼承:
-
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{}
結果:這是第一個類。 frist 第二個類和第三個類沒有重寫printer()方法,第三個類例項化後可以呼叫printer()方法。
-
繼承許可權問題 2.1 父類private方法不可被繼承,父類私有化 2.2 父類protected方法可以被繼承,但不能被例項化物件呼叫,如果呼叫會出現" Call to protected method frist::printer()"的報錯,父類對此方法置於保護模式下 2.3 父類public方法可以被繼承、可以被例項化物件呼叫,屬於公開方法 2.4 子類可重寫父類public或者protected的方法,不能重新private的方法,如果同名只是在本類重新宣告
-
介面類繼承 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
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();即可。
原創帖,轉載請註明出處~