案例:饲养员喂养动物(Java)

【上机要求】

饲养员在给动物喂食时,给不同的动物喂不同的食物,而且在每次喂食时,动物都会发出欢快的叫声。例如,给小狗喂骨头,小狗会汪汪叫;给小猫喂食,小猫会喵喵叫。

本案例要求编写一个程序模拟饲养员喂食动物的过程,案例要求如下:

(1) 饲养员给小狗喂骨头,小狗汪汪叫。

(2) 饲养员给小猫喂小鱼,小猫喵喵叫。

【上机指导】

在这个动物园里,涉及的对象有饲养员,各种不同动物以及各种不同的食物。这样很容易抽象出3个类Feeder、Animal和Food。假设只考虑猫类和狗类动物,则由Animal类派生出Cat类、Dog类、同样由Food类可以进一步派生出其子类Bone、Fish。因为他们之间存在这明显的is-a关系。

同样的,鱼是一种食物,但实际上,鱼也是一种动物,Cat类和Dog类继承了Animal的很多属性和方法,如果将Animal定义为接口,Animal中是不能定义成员变量和成员方法的,Food类中虽然也有变量但是数量比Animal少,所以我们考虑将Food定义为接口,此时可以说“鱼是一种动物,同时也是一种食物”。

【代码区】

                                                              zoo.java主函数

package zoo;

public class Zoo {
      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);
       }
}

                                                        Animal类

package zoo;

public  class Animal {
    public String animalName;

    public Animal(String animalName){
        this.animalName = animalName;
    }

    public String getAnimalName(){

        return animalName;
    }

    public void setAnimalName(String animalName){

        this.animalName = animalName;
    }



  public void eat(Food food) {

  }


}

                                                             Cat类

package zoo;

public class Cat extends Animal {
    public Cat(String animalName){
        super(animalName);
    }

    public void shout(){
        System.out.println("喵喵喵!");
    }

    public void eat(Food food) {
        System.out.println(super.animalName + "正在吃着香喷喷的:" + food.getfoodname());
    }


}

                                                                Dog类

package zoo;

public class Dog extends Animal {
    public Dog(String animalName){
        super(animalName);
    }

    public void eat(Food food) {
        System.out.println(super.animalName + "正在吃着香喷喷的:" + food.getfoodname());
    }
    public void shout(){
        System.out.println("汪汪汪!");
    }
}

                                                                Food接口

package zoo;

public interface Food {
    public String getfoodname();
}

                                                                Bone类

package zoo;
public class Bone implements Food{
    public String getfoodname(){
        return "骨头";
    }
}

                                                                Fish类

package zoo;
public class Fish  implements Food {
    public String getfoodname(){
        return "黄花鱼";
    }
}

                                                                Feeder类

package zoo;

public class Feeder {
    public void setFeederName(String feederName) {
        this.feederName = feederName;
    }

    public static String feederName;

    public Feeder(String feederName){

        this.feederName = feederName;
    }

    public static String getFeederName(){
        return feederName;
    }
    
    public static void speak(){
        System.out.println("大家好!");
        System.out.println("欢迎光临疯狂动物园!我是饲养员"+getFeederName() );
    }

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


}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值