以动物园中饲养员给动物喂食为业务背景,让同学们体会“抽象类、类的继承、接口、接口实现类、方法重写和多态”等面向对象思想的综合应用。
动物园有饲养员,以及狗、猫这两种动物。饲养员给不同的动物喂不同的食物:给
狗喂骨头,给猫喂鱼。动物进食时会发出叫声:狗会汪汪叫,而猫会喵喵叫。
程序模拟饲养员喂食动物的过程,主要功能如下:
( 1) 饲养员说:“欢迎来到动物园!我是饲养员×××”。
(2) 饲养员给狗喂骨头,狗吃食物发出“汪汪~~”的叫声。
( 3) 饲养员给猫喂鱼,猫吃食物发出“喵喵~~”的叫声。
【案例目标】
• 学会分析“饲养员喂养动物”程序设计的实现思路。
• 根据思路独立完成“饲养员喂养动物”程序设计的源代码编写、编译及运行。
• 学会灵活运用接口解决多继承问题。
【案例分析】
案例涉及的对象有饲养员,各种不同动物以及各种不同的食物。这样很容易抽象
出 3 个类:饲养员 Feeder、动物 Animal 和食物 Food。
动物园喂养了猫类和狗类动物,则由 Animal 类派生出 Cat 类、 Dog 类。
同样,由 Food 类可以派生出其子类:骨头 Bone 类、鱼 Fish 类。由于鱼既是一种
食物,实际上也是一种动物。但是 Java 不支持多重继承,因此 Fish 不可能有 Food 和
Animal 两个父类。解决方法是把 Food 和 Animal 其中之一改为接口。考虑到 Cat 类和
Dog 类需要继承 Animal 的很多属性和方法, Food 中虽然也有变量但是数量比 Animal
少,所以我们最终考虑将 Food 定义为接口,让 Fish 和 Bone 去实现接口。
【程序结构】
【运行代码】
1.
package cn.edu.gpnu.bank.Feeder;
public abstract class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void eat(Food food);
}
package cn.edu.gpnu.bank.Feeder;
class Bone implements