php抽象類的簡單應用


  抽象類也是面向對象中的重要概念,和接口、繼承的概念重要性相當,在面向對象的開發中,所有的對象都是通過類來描述的,但是反過來,並不是所有類都是用來描繪對象的,廣義上講如果一個類中沒有足夠信息來描述一個具體的對象,這樣的類就是抽象類。具體用簡單的代碼來實現:

 1 abstract class ACanEat {
 2    // 抽象方法需要在子類中實現 
 3    abstract public function eat($food);
 4 
 5    public function breath(){
 6       echo "Breath use the air.<br />";
 7    }
 8 }
 9 
10 // Human類繼承了ACanEat抽象類
11 class Human extends ACanEat { 
12   // 跟Animal類的實現是不同的
13   public function eat($food){
14     echo "Human eating " . $food . "\n";
15   }
16 }
17 
18 // Animal類繼承了ACanEat抽象類
19 class Animal extends ACanEat {
20   public function eat($food){
21     echo "Animal eating " . $food . "\n";
22   }
23 }
24 
25 $man = new Human();
26 $man->eat("Apple");
27 $man->breath(); // 和Animal共用了抽象類ACanEat的breath方法
28 $monkey = new Animal();
29 $monkey->eat("Banana");
30 $monkey->breath();

從代碼可以簡單的看出,抽象類定義前面以abstract關鍵字開始,里面可以定義多個方法,可以具體實現,也可以定義為抽象方法,沒有實現的方法需要設定為抽象方法,需要在最前面加abstract關鍵字,抽象方法需要在子類中實現,而普通方法子類可以不用重寫,對象可以直接使用。

  上面代碼中,Human類和Animal類都繼承了ACanEat抽象類,通過各自不同的方法實現了eat,但是兩個類繼承了相同的方法breath,這個屬性可以認為是相同的,無論實例化哪個對象都可以使用相同的breath方法

  所以,抽象類其實就是介於普通類和接口之間的一個類,普通類需要實現所有方法,接口所有方法都不需要實現,而抽象類可以根據自己的需要去選擇實現部分方法;但是一旦類里面有抽象方法,這個類就必須是抽象類,另外注意,抽象類跟接口一樣,不能直接實例化為對象,只能被普通類繼承,,其實抽象類同樣體現了面向對象的多態現象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM