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

抽象类和接口类

作者: 像敏锐的狗 | 来源:发表于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

相关文章

  • java的final关键字

    ——修饰类、接口和抽象类 final可以修饰方法,属性,类!但是不能修饰接口,抽象类;因为 接口和抽象类本身就是...

  • 5.5-全栈Java笔记:接口的定义和使用

    接口interface 接口的作用 为什么需要接口?接口和抽象类的区别? 接口就是比“抽象类”还“抽象”的“抽象类...

  • 抽象类和接口的区别

    以下两篇文章介绍了接口和抽象类的概念接口概念抽象类概念 抽象类和接口的区别: 抽象类:需要使用abstract关键...

  • 接口和抽象类的区别

    接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类...

  • 接口和抽象类

    接口和抽象类的区别? 接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制...

  • 抽象类和接口的区别

    抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么。 1、抽象类和接口都不能直接...

  • 建造者模式

    建造者抽象类或接口 建造者抽象类或接口实现类 产品抽象类或接口 产品抽象类或接口实现类 使用

  • Android面试题

    接口和抽象类的区别: 抽象类只能单继承,接口能多实现(一个类只能继承一个抽象类,但是能实现多个接口) 抽象类是一个...

  • 代理(委托)模式

    主题抽象类或接口 主题抽象类或接口实际类 主题抽象类或接口代理类 使用

  • 接口跟抽象类的对比

    抽象类和接口的区别抽象类被子类继承 接口被类实现接口可以做方法生命 抽象类可以做方法生命 也可以做方法实现接口中定...

网友评论

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

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