港海建设网站,兰州网站建设加q.479185700,全球中文网站排名,免费空间访客领取网站【案例4-2】饲养员喂养动物 记得 关注#xff0c;收藏#xff0c;评论哦#xff0c;作者将持续更新。。。。 【案例目标】
案例描述
饲养员在给动物喂食时#xff0c;给不同的动物喂不同的食物#xff0c;而且在每次喂食时#xff0c;动物都会发出欢快的叫声。例如…【案例4-2】饲养员喂养动物 记得 关注收藏评论哦作者将持续更新。。。。 【案例目标】
案例描述
饲养员在给动物喂食时给不同的动物喂不同的食物而且在每次喂食时动物都会发出欢快的叫声。例如给小狗喂骨头小狗会汪汪叫给小猫喂食小猫会喵喵叫。
本案例要求编写一个程序模拟饲养员喂食动物的过程案例要求如下
饲养员给小狗喂骨头小狗汪汪叫。饲养员给小猫喂小鱼小猫喵喵叫。
运行结果【案例分析】
在这个动物园里涉及的对象有饲养员各种不同动物以及各种不同的食物。这样很容易抽象出3个类Feeder、Animal和Food。假设只考虑猫类和狗类动物则由Animal类派生出Cat类、Dog类、同样由Food类可以进一步派生出其子类Bone、Fish。因为他们之间存在这明显的is-a关系。
同样的鱼是一种食物但实际上鱼也是一种动物Cat类和Dog类继承了Animal的很多属性和方法如果将Animal定义为接口Animal中是不能定义成员变量和成员方法的Food类中虽然也有变量但是数量比Animal少所以我们考虑将Food定义为接口此时可以说“鱼是一种动物同时也是一种食物”。
【案例实现】
Animal.java
public abstract class Animal { private String name; public Animal(String name) { this.name name; } public abstract void shout(); public abstract void eat(Food food); public String getName() { return name; } public void setName(String name) { this.name name; }}
上述代码中定义了抽象类Animal第4行代码声明了动物名称name第7~13行代码提供了name的getter和setter方法。同时编写了动物发声的抽象方法shout()和动物吃饭的抽象方法eat()。
Dog.java
public class Dog extends Animal { public Dog(String name) { super(name); } Override public void shout() { System.out.print (汪汪汪~~~); } Overridepublic void eat(Food food) { System.out.println(getName() 正在啃着香喷喷的 food.getName()); }}
上述代码中定义了Dog类并继承了Animal类第 2~4行代码是在Dog类中定义类构造方法并在构造方法中调用了父类的构造方法。第6~12行代码重写了父类Animal动物发声的抽象方法shout()和动物吃饭的抽象方法eat()。
Cat.java
public class Cat extends Animal{ public Cat(String name) { super(name); } public void shout() { System.out.print(喵喵喵~~~); } public void eat(Food food) { System.out.println(getName() 正在吃着香喷喷的food.getName());}}
上述代码中定义了Cat类并继承了Animal类第2~4行代码是在Cat类中定义类构造方法并在构造方法中调用了父类的构造方法。第5~10行代码重写了父类Animal动物发声的抽象方法shout()和动物吃饭的抽象方法eat()。
Food.java
public interface Food { public abstract String getName();}
上述代码中定义了一个Food接口在接口中编写了一个抽象方法getName()。
Bone.java
public class Bone implements Food{ Override public String getName() { return 骨头; }}
上述代码中定义了一个Bone类并实现了Food接口在Bone类中实现了Food接口的getName()方法。
Fish.java
public class Fish extends Animal implements Food{ public Fish(String name) { super(name); } Override public void shout() { } Override public void eat(Food food) {}}
上述代码中定义了一个Fish类Fish类继承了Animal类并实现了Food接口第2~4行代码是在Fish类中定义了构造方法并在构造方法中调用了父类Food的构造方法第5~10行代码是继承了Animal类的shout()方法和eat()方法。
Feeder.java
public class Feeder { private String name; public Feeder(String name) { this.name name; } public void speak() { System.out.println(欢迎来到动物园); System.out.println(我是饲养员 getName()); } public void feed(Animal a, Food food) { a.eat(food); } public String getName() { return name; } public void setName(String name) { this.name name; }}
上述代码中定义了一个Feader类Feader类中声明了饲养员名称name并提供了name属性的getter和setter方法定义了构造方法同时第6~12行代码编写了饲养员说话的speak()方法和饲养动物的feed()方法。
DongWuTest.java
public class DongWuTest { public static void main(String[] args) { Feeder feeder new Feeder(小华); feeder.speak(); Dog dog new Dog(小狗); dog.shout(); Food food new Bone(); feeder.feed(dog, food); Cat cat new Cat(小猫); cat.shout(); food new Fish(黄花鱼); feeder.feed(cat, food); }}
上述代码中定义了一个测试类DongWuTest第3~4行代码是在DongWuTest类中创建了一个feeder对象并调用了饲养员说话的方法speak()然后第7~12行代码是创建了food对象、dog对象和cat对象并在创建dog和cat对象时传入动物的名称最后通过feeder对象调用feed()方法模拟饲养员喂养动物分别通过dog和cat对象调用shout()方法模拟动物发声。