【java】饲养员喂养动物程序设计

以动物园中饲养员给动物喂食为业务背景,让同学们体会“抽象类、类的继承、接口、接口实现类、方法重写和多态”等面向对象思想的综合应用。 

动物园有饲养员,以及狗、猫这两种动物。饲养员给不同的动物喂不同的食物:给
狗喂骨头,给猫喂鱼。动物进食时会发出叫声:狗会汪汪叫,而猫会喵喵叫。

程序模拟饲养员喂食动物的过程,主要功能如下:
( 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 Food {
    
    
    private String name;

    public Bone(String name) {
    
    
        this.name = name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getName(){
    
    
        return name;
    }

}

package cn.edu.gpnu.bank.Feeder;

public class Cat extends Animal{
    
    

    public Cat(String name) {
    
    
        super(name);
    }

    public void eat(Food food) {
    
    
        System.out.println("喵喵喵~~"+getName()+"正在吃鲜美的"+food.getName());
    }
}

package cn.edu.gpnu.bank.Feeder;

public class Dog extends Animal {
    
    

    public Dog(String name) {
    
    
        super(name);
    }


    public void eat(Food food){
    
    
        System.out.println("汪汪汪~~"+getName()+"正在啃香喷喷的"+food.getName());
    }
}

package cn.edu.gpnu.bank.Feeder;

public  class Feeder {
    
    
    public String name;

    public Feeder(String name) {
    
    
        this.name = name;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public void speak(){
    
    
        System.out.println("欢迎来到动物园!"+"我是饲养员"+getName());
    }

    public void feed(Animal animal,Food food){
    
    
        animal.eat(food);
    }

}

package cn.edu.gpnu.bank.Feeder;

class Fish extends Animal implements Food {
    
    

    public Fish(String name) {
    
    
        super(name);
    }

    @Override
    public String getName() {
    
    
        super.getName();
        return name;
    }



    @Override
    public void eat(Food food) {
    
    

    }
}

package cn.edu.gpnu.bank.Feeder;

public interface Food {
    
    

    public String getName();

}

package cn.edu.gpnu.bank.Feeder;

public class Zoo {
    
    
    public static void main(String[] args){
    
    
        Feeder feeder = new Feeder("小华");
        feeder.speak();

        Dog dog = new Dog("泰迪犬");
        Cat cat = new Cat("波斯猫");

        Bone bone =new Bone("猪骨头");
        Fish fish =new Fish("黄花鱼");

        feeder.feed(dog,bone);
        feeder.feed(cat,fish);
    }
}

【运行结果】
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_52703008/article/details/126201016