美文网首页
抽象类和接口类

抽象类和接口类

作者: 像敏锐的狗 | 来源:发表于2019-05-29 15:38 被阅读0次

    假设现在有六个类

    动物(Animal)抽象类

    老虎(tiger) 继承动物类

    蛇类(snake) 继承动物类

    兔子(rabbit) 继承动物类

    农夫(farmer)农夫可以喂养Animal

    贴代码跟解释

    abstract class Animal{ //定义一个抽象类animal

    public function move($destination){}//动物移动

    public function drink(){}//动物喝水

    }

    //三个动物 tiger snake rabbit

    class tiger extends Anima{

    public function getname(){

    return 'tiger';

    }

    public function move($destination){

    echo $this->getname().' move to '.$destination.'<br>';

    }

    public function drink(){

    echo $this->getname().' drink water <br>';

    }

    public function hunt($animal){

    echo $this->getname().' hunt '.$animal."<br>";

    }

    }

    class snake extends Animal{

    public function getname(){

    return 'snake';

    }

    public function move($destination){

    echo  $this->getname().' move to '.$destination.'<br>';

    }

    public function drink(){

    echo $this->getname().' drink water <br>';

    }

    public function hunt($animal){

    echo $this->getname().' hunt '.$animal."<br>";

    }

    }

    class rabbit extends Animal{

    public function getname(){

    return 'rabbit';

    }

    public function move($destination){

    echo $this->getname().' move to '.$destination."<br>";

    }

    public function drink(){

    echo $this->getname().' drink water <br>';

    }

    }

    //农夫喂水

    class farmer{

    public function feedwater(Animal $animal,$destination){

    $animal->move($destination);

    $animal->drink();

    }

    public function feedanimal(Animal $animal,$destination){

    $animal->hunt($destination);

    }

    }

    $farmer=new farmer();

    $farmer->feedwater(new tiger(),'room');

    $farmer->feedwater(new snake(),'grassland');

    $farmer->feedwater(new rabbit(),'kitchen');

    $farmer->feedanimal(new tiger(),'animal');

    $farmer->feedanimal(new snake(),'animal');

    使用接口类

    <?php

    interface Animal{

    public function move($destination);//动物移动

    public function drink();//动物喝水

    }

    //tiger snake实现捕食方法 但是rabbit不存在这个方法 所以需要再另外定义一个接口类

    //引用接口

    interface Hunt{

    public function hunt($animal);

    }

    class tiger  implements Animal,Hunt{

    public function getname(){

    return 'tiger';

    }

    public function move($destination){

    echo $this->getname().' move to '.$destination.'<br>';

    }

    public function drink(){

    echo $this->getname().' drink water <br>';

    }

    public function hunt($animal){

    echo $this->getname().' hunt '.$animal."<br>";

    }

    }

    class snake  implements Animal{

    public function getname(){

    return 'snake';

    }

    public function move($destination){

    echo  $this->getname().' move to '.$destination.'<br>';

    }

    public function drink(){

    echo $this->getname().' drink water <br>';

    }

    public function hunt($animal){

    echo $this->getname().' hunt '.$animal."<br>";

    }

    }

    class rabbit implements Animal{

    public function getname(){

    return 'rabbit';

    }

    public function move($destination){

    echo $this->getname().' move to '.$destination."<br>";

    }

    public function drink(){

    echo $this->getname().' drink water <br>';

    }

    }

    //农夫喂水

    class farmer{

    public function feedwater(Animal $animal,$destination){

    $animal->move($destination);

    $animal->drink();

    }

    public function feedanimal(Animal $animal,$destination){

    $animal->hunt($destination);

    }

    }

    $farmer=new farmer();

    $farmer->feedwater(new tiger(),'room');

    $farmer->feedwater(new snake(),'grassland');

    $farmer->feedwater(new rabbit(),'kitchen');

    $farmer->feedanimal(new tiger(),'animal');

    $farmer->feedanimal(new snake(),'animal');

    写法是类似的

    abstract跟interface的区别

    1.abstract 可以有成员变量 可以实现方法

    2.interface可以实现继承多个接口

    上述的接口类hunt 可以不要 但是为了说明多继承还是加上了

    摘自:https://blog.csdn.net/qq_36899235/article/details/84190492

    相关文章

      网友评论

          本文标题:抽象类和接口类

          本文链接:https://www.haomeiwen.com/subject/ydyytctx.html