close

「覆寫」(override)指的是子類別把繼承自父類別的方法重新定義,在這個過程中,父類別的方法並不會受到影響。透過覆寫的技巧可以實作物件導向程式設計的「多型」(polymorphism)。

下面程式碼是子類別覆寫父類別的範例:

 <?php
      class Pay  //父類別
      {
        public $Name;  //定義屬性(可以被繼承)
        public function Payment($Hours, $PayRate)  //定義方法(可以被繼承)
        {
          return $Hours * $PayRate;
        }
      }
      class Bonus extends Pay  //子類別繼承父類別Pay
      {
        public function Payment($Hours, $PayRate)        //覆蓋父類別的方法
        {
          return $Hours * $PayRate + 5000;
        }
      }
      $Obj1 = new Pay();  //呼叫父類別的方法
      $Obj2 = new Bonus();  //呼叫子類別的方法
      echo '原本的薪資為'.$Obj1->Payment(100, 80).'<br>';  //輸出$Obj1
      echo '加上獎金之後的薪資為'.$Obj2->Payment(100, 80).'<br>';  //輸出$Obj2
    ?>

執行結果:

原本的薪資為8000
加上獎金之後的薪資為13000

 

呼叫父類別內被覆寫的方法

以上面的例子來舉例:

public function Payment($Hours, $PayRate)        //覆蓋父類別的方法
        {
          return $Hours * $PayRate + 5000;
        }

紅字重覆的部份可以改為

public function Payment($Hours, $PayRate)
        {
          return parent::Payment($Hours,$PayRate) + 5000;  
        }

parent 關鍵字代表目前所在子類別的父類別,透過這個關鍵字,就可以呼叫父類別內被覆蓋的方法,也可以直接指定父類別的名稱,如下舉例

public function Payment($Hours, $PayRate)
        {
          return Pay::Payment($Hours,$PayRate) + 5000;  
        }

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 mingyilai 的頭像
    mingyilai

    mingyilai的部落格

    mingyilai 發表在 痞客邦 留言(0) 人氣()