发布网友 发布时间:2022-04-06 14:31
共6个回答
懂视网 时间:2022-04-06 18:53
问题:用面向对象的编程方式模拟出以下真实的场景,代码要能体现出多态的概念
一个农村老人小刘,养了5鸡,和5只狗,每天早上,他都会6点准时起床,煮稀饭,吃完稀饭后,然后他会提着2小桶食物去给鸡和鸭喂食,走到鸡栏边,它把其中的一桶米倒入鸡食槽里,走到狗窝旁,又把剩下的装有残羹剩菜的一桶食物倒入狗狗吃的食槽里
思路分析:
1、对象分析:里面的对象有老人,鸡,狗,食物 所以至少有这4个类
2、对象属性分析:(结合具体的场景+现实世界)
老人:名称
鸡:个数
狗:个数
食物:名称
3、对象方法分析:(结合具体的场景+现实世界)
老人:起床,煮稀饭,吃(吃稀饭),喂食
鸡:吃(啄米吃)
狗:吃(吃骨头)
食物:设置食物名称
4、综上分析,我们发现其中3个对象都有吃的方法,但是他们分别有不同的吃法,所以我们可以把这个公共方法抽离出来做成一个接口,然后让这3个类分别去实现它
具体实现代码如下:
<?php //定义吃的接口 interface Eat{ public function eat($food); } //定义食物 class Food{ public $name = ""; public function __construct( $name ){ $this->name = $name; } } //定义人 class Human implements Eat{ public $name = ""; public function __construct( $name ){ $this->name = $name; } //起床 public function wakeup(){ echo $this->name."起床了<br/>"; } //煮稀饭 public function cook($food){ echo $this->name."煮".$food->name."了<br/>"; } public function eat($food){ echo $this->name."吃了".$food->name."<br/>"; } //喂食 function startFeed( $obj,$food ){ if( $obj instanceof Eat ){ $obj->eat($food); }else{ echo "该对象没有实现Eat的方法<br/>"; } } public function feed($obj, $food){ $this->startFeed( $obj,$food ); } } //定义鸡的类 class Chiken implements Eat{ public $count = 5; public function eat($food){ echo $this->count."只小鸡们,都吃了".$food->name."<br/>"; } } //定义狗的类 class Dog implements Eat{ public $count = 5; public function eat($food){ echo $this->count."只小狗们,都吃了".$food->name."<br/>"; } } //创建对象 $xiaoliu = new Human("小刘"); $chikens = new Chiken(); $dogs = new Dog(); //创建食物 $xfFood = new Food("稀饭"); $seedsFood = new Food("米"); $mealFood = new Food("残羹剩饭"); //老人起床 $xiaoliu->wakeup(); //老人煮稀饭 $xiaoliu->cook($xfFood); //老人吃稀饭 $xiaoliu->eat( $xfFood ); //老人喂食开始 $xiaoliu->feed($chikens,$seedsFood);//给小鸡喂食 $xiaoliu->feed($dogs,$mealFood);//给小狗喂食 ?>
运行结果为:
小刘起床了
小刘煮稀饭了
小刘吃了稀饭
5只小鸡们,都吃了米
5只小狗们,都吃了残羹剩饭
1、本文主要是讲了多态的定义和作用,以及具体的实现
希望本文能给大家带来一定的帮助,谢谢!!!
热心网友 时间:2022-04-06 16:01
1.多态是指在面向对象中能够根据使用类的上下文来重新定义或改变类的性质和行为。
2.PHP不支持重载实现多态,但是PHP可以变向的实现多态效果。
3.php其语法特点,不支持固定变量类型,它是根据上下文来确定当前的类型是什么,即,最后一次赋值是什么类型,现在它就是什么类型。也就不存在将子类
变量赋给基类变量的说法。但php函数的参数,是可以规定类型的,如下面的show函数。如果传递一个不是此类型的参数,将会在运行时报错。
代码如下:
热心网友 时间:2022-04-06 17:19
很显然PHP并不支持相同的函数名。热心网友 时间:2022-04-06 18:53
PHP的类中不允许像C#或者Java那样定义多个名称相同但是参数顺序、类型不同的方法,而是通过对参数赋默认值的方式来实现函数的参数形式可变,看起来像多态,但是不是真实意义上的多态。热心网友 时间:2022-04-06 20:45
理论上来讲PHP是不支持多态的热心网友 时间:2022-04-06 22:53
你猜,你猜,你猜猜猜