目录
题目
饲养员在给动物喂食时,给不同的动物喂不同的食物,而且在每次喂食时,动物都会发出欢快的叫声。例如,给小狗喂骨头,小狗会汪汪叫;给小猫喂食,小猫会喵喵叫。
本案例要求编写一个程序模拟饲养员喂食动物的过程,案例要求如下:
- 饲养员给小狗喂骨头,小狗汪汪叫。
- 饲养员给小猫喂小鱼,小猫喵喵叫。
分析
案例涉及的对象有饲养员,各种不同动物以及各种不同的食物。这样很容易抽象出 3 个类:饲养员 Feeder、动物 Animal 和食物 Food。动物园喂养了猫类和狗类动物,则Cat 类、 Dog 类是 Animal 类的子类 。同样,由 Food 类可以派生出其子类:骨头 Bone 类、鱼 Fish 类。由于鱼既是一种食物,实际上也是一种动物。所以, 将Food 定义为接口,让 Fish 和 Bone 去实现接口。
代码
1.Animal.java
package animal;
public abstract class Animal {
private String name;
public Animal(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
abstract void shout();
abstract void eat(Food food);
}
2.Dog.java
package animal;
public class Dog extends Animal {
public Dog(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
void shout() {
// TODO Auto-generated method stub
System.out.println("汪汪。。。。");
}
@Override
void eat(Food food) {
// TODO Auto-generated method stub
System.out.println(getName()+"正在吃香喷喷的"+food.getName());
}
}
3.Cat.java
package animal;
public class Cat extends Animal {
public Cat(String name) {
super(name);
// TODO Auto-generated constructor stub
}
void shout() {
// TODO Auto-generated method stub
System.out.println("喵喵。。。");
}
@Override
void eat(Food food) {
// TODO Auto-generated method stub
System.out.println(getName()+"正在吃香喷喷的"+food.getName());
}
}
4.Food.java
package animal;
public interface Food {
String getName();
}
5.Bone.java
package animal;
public class Bone implements Food {
@Override
public String getName() {
// TODO Auto-generated method stub
return "肉骨头";
}
}
6.Fish.java
package animal;
public class Fish extends Animal implements Food {
public Fish(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
void shout() {
// TODO Auto-generated method stub
}
@Override
void eat(Food food) {
// TODO Auto-generated method stub
}
}
7.Feeder.java
package animal;
public class Feeder {
private String name;
public Feeder(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void speak() {
System.out.println("欢迎来到动物园!");
System.out.println("我是饲养员 "+getName());
}
void feeder(Animal a, Food f) {
a.eat(f);
}
}
8.AnimalTest.java
package animal;
public class AniamlTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal dog=new Dog("金毛");
Food bone=new Bone();
Feeder feeder=new Feeder("Lisa");
feeder.speak();
feeder.feeder(dog, bone);
Animal cat=new Cat("波斯猫");
Food fish=new Fish("黄花鱼");
feeder.feeder(cat, fish);
}
}
运行结果