• interface 接口 和多态的含义


     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);
  • 相关阅读:
    1.JMeter===添加响应断言
    1.Linux下Git入门学习
    14.Selenium+Python使用火狐浏览器问题解决
    13.Selenium不再支持PhantomJS
    12.Selenium+Python案例 -- 今日头条(获取科技栏目的所有新闻标题)
    11.Selenium+Python案例--百度
    10.Selenium+Python+任务计划程序实现定时发送邮件
    The connection to adb is down and a sever error has occured的解决
    Eclipse与github整合完整版
    GIT命令整理
  • 原文地址:https://www.cnblogs.com/jacson/p/4620563.html
Copyright © 2020-2023  润新知