【java】ブリーダーが動物に餌を与えるためのプログラミング

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

動物園には飼育員のほか、犬と猫の 2 匹の動物がいます。
飼育員は、犬には骨、猫には魚など、さまざまな動物にさまざまな食べ物を与えます。動物は食事をするときに音を立てます。犬は吠え、猫はニャーと鳴きます。

このプログラムは、飼育員が動物に餌を与える過程をシミュレートするもので、主な機能は次のとおりです:
(1) 飼育員は「動物園へようこそ! 私は飼育員の×××です。」と言います。
(2) ブリーダーが犬に骨を与えると、犬はそれを食べるときに「ワン~~」と音を立てます。
(3)飼育者が猫に魚を与えると、猫が餌を食べると「ニャ~~」と鳴きます。

【事件の目的】

• 「動物に餌を与える飼育者」のプログラム設計の実施アイデアを分析する方法を学びます。

• アイデアに基づいて「ブリーダーが動物に餌を与える」プログラム設計のソース コードの作成、コンパイル、および操作を独自に完了します。

• インターフェースを柔軟に使用して多重継承の問題を解決する方法を学びます。

【事件分析】
事件の対象となるのは飼育者、各種動物、各種食品など。
このようにして、 Feeder、Animal、Food の 3 つのクラスを簡単に抽象化できます。
動物園では犬と猫に餌を与えているため、Cat クラスと Dog クラスは Animal クラスから派生しています。

同様に、Food クラスはそのサブクラス、Bone クラスと Fish クラスを派生できます。魚は単なる
食べ物ではなく、実は動物でもあります。ただし、Java は多重継承をサポートしていないため、Fish は Food と

動物の 2 つの親クラス。解決策は、Food と Animal のいずれかをインターフェースに変更することです。Cat クラスを考慮すると、

DogクラスはAnimalの属性やメソッドを多く継承する必要があり、Foodにも変数はありますが、Animalに比べると数は少ないです。

ほとんどなかったので、最終的に Food をインターフェースとして定義し、Fish and 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