文章出處

 1 <?php
 2 //interface關鍵字用于定義接口
 3 interface ICanEat{
 4     //接口里面的方法不需要方法的實現
 5     public function eat($food) ;
 6 }
 7 //implemaents關鍵字用于表示類實現某個接口
 8 class Human implements ICanEat{
 9     //實現了某個接口之后,必須提供接口中定義的方法的具體實現
10     public function eat($food) {
11         echo "Human eating ".$food."<br/>";
12     }
13 }
14 class animal implements ICanEat{
15     //實現了某個接口之后,必須提供接口中定義的方法的具體實現
16     public function eat($food) {
17         echo "Animal eating ".$food."<br/>";
18     }
19 }
20 $obj=new Human();
21 $obj->eat('Apple');
22 
23 $monkey = new Animal();
24 $monkey->eat('Banana');
25 
26 //不能實例化接口
27 //$eatObj = new ICanEat();
28 
29 //可以使用instanceof關鍵字來判斷某個對象是否實現了某個接口
30 var_dump($obj instanceof ICanEat);
31 
32 function checkEat($obj) {
33     if($obj instanceof ICanEat) {
34         $obj->eat('food');
35     }else {
36         echo "The obj can't eat"."<br/>";
37     }
38 }
39 
40  checkEat($obj)."<br/>";
41  checkEat($monkey);
42 
43  //可以用extends讓接口繼承接口
44  interface ICanPee extends ICanEat{
45      public function pee();
46  }
47  //當類實現子接口時,父接口定義的方法也需要在這個類里面具體實現
48  class Human1 implements ICanPee{
49      public function pee() {}
50      public function eat($food){}
51  }

總結:

某個類實現(implements)了某個接口和繼承(extends)了某個類的區別
  --實現接口和繼承類很類似,但是接口不能直接創建自己的對象
     ··如果創建了“會吃東西這個對象”,那么具體怎么吃根本不知道
  --繼承的父類必須有該方法的具體實現,子類可以重寫父類的方法,也可以不重寫
      接口里面的方法是不需要具體實現的,只要定義了方法的名稱和參數就可以了,
  --具體的實現必須在實現類中定義
  --一句話概括:類的方法必須有實現,接口的方法必須為空

 

多態:

多態:因為接口的方法實現可以有很多種,所以對于接口里面的定義的方法具體實習是多種多樣的,這種特性我們稱為多態

比如接口A有兩個實現B和C,B和C對A里面定義的方法的實現可以是不同的,這種現象就是多態

對于上面接口的例子中

1 //相同的一行代碼,對于傳入不同的接口的實現的對象的時候,表現是不同的,這就是多態
2  checkEat($obj);
3  checkEat($monkey);

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()