抽象类和接口类

假设现在有六个类

动物(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.'
';

}

public function drink(){

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

}

public function hunt($animal){

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

}

}

class snake extends Animal{

public function getname(){

return 'snake';

}

public function move($destination){

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

}

public function drink(){

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

}

public function hunt($animal){

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

}

}

class rabbit extends Animal{

public function getname(){

return 'rabbit';

}

public function move($destination){

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

}

public function drink(){

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

}

}

//农夫喂水

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');



使用接口类

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.'
';

}

public function drink(){

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

}

public function hunt($animal){

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

}

}

class snake  implements Animal{

public function getname(){

return 'snake';

}

public function move($destination){

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

}

public function drink(){

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

}

public function hunt($animal){

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

}

}

class rabbit implements Animal{

public function getname(){

return 'rabbit';

}

public function move($destination){

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

}

public function drink(){

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

}

}

//农夫喂水

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

你可能感兴趣的:(抽象类和接口类)