本案例要求编写一个程序模拟饲养员喂食动物的过程,案例要求如下:
饲养员给小狗喂骨头,小狗汪汪叫。
饲养员给小猫喂小鱼,小猫喵喵叫。
定义Dog类
package 实验五;
public class Dog extends Animal{ // 狗类继承动物类
@Override
public void Jiao() {
System.out.println("汪汪汪~~~");
}
@Override
void eat(Food food) {
System.out.println(super.getName() + "正在吃着香喷喷的:" + food.gatName());
}
public Dog(String name) {
super(name);
}
}
定义Cat类
package 实验五;
public class Cat extends Animal{ // 猫类继承动物类
@Override
public void Jiao() {
System.out.println("喵喵喵~~~");
}
@Override
void eat(Food food) {
System.out.println(super.getName() + "正在吃着香喷喷的:" + food.gatName());
}
public Cat(String name) {
super(name);
}
}
定义Animal类
package 实验五;
public abstract class Animal { // 动物类(抽象)
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
abstract void Jiao();
abstract void eat(Food food);
}
定义Bone类
package 实验五;
public class Bone implements Food{ // 骨头类实现食物类
@Override
public String gatName() {
return "骨头";
}
}
定义Fish类
package 实验五;
public class Fish implements Food{ // 鱼类继承动物类实现食物类
@Override
public String gatName() {
return "黄花鱼";
}
}
定义Feeder类
package 实验五;
public class Feeder { // 饲养员类
private String name;
public Feeder(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void hy(){ // 说明
System.out.println("欢迎来到动物园!");
System.out.println("我是饲养员:" + getName());
}
public void wei(Animal a , Food food){ // 创建wei类 传入动物类与食物类
a.eat(food); // 通过动物类调用eat方法,传入食物对象
}
}
定义接口Food
package 实验五;
public interface Food { // 食物类
String gatName();
}
定义测试类
package 实验五;
public class Test { // 测试类
public static void main(String[] args) {
Feeder b = new Feeder("小华"); // 创建饲养员类对象
b.hy();
Animal cat = new Cat("小猫"); // 通过多态创建猫类对象
cat.Jiao();
Food f1 = new Fish(); // 创建鱼类对象
b.wei(cat , f1); // 通过对象调用wei方法
Animal dog = new Dog("小狗"); // 创建狗类对象
dog.Jiao();
Food f = new Bone(); // 创建骨头类对象
b.wei(dog,f);
}
}