抽象类和接口类

假设现在有六个类

动物(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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 接口的特点和继承 没有构造器,不能实例化 接口只能继承接口,不能继承类,且支持多继承 接口里的方法全是抽象的,没有...
    Mtllll阅读 637评论 0 0
  • 先说自己的看法 几点含有抽象方法的类一定是抽象类抽象类不一定含有抽象方法抽象类中可以有普通的方法抽象类不能直接实例...
    LeeBoot阅读 694评论 0 0
  • 实现防盗门的功能 第一种方案 门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能 将门和锁分别定义为抽象类 防...
    蛋炒饭_By阅读 886评论 1 1
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,448评论 0 10
  • 我亲爱的你,是否还记得? 那一年,也是今天的日子。 我还在熟睡中,你突然打来电话 想回家和我一起过节 不辞辛苦从石...
    陈蒙蒙_f323阅读 225评论 0 1