类的多态性综合应用练习-猴子游戏与觅食

题目描述

1、设计食物类(Food),具有私有属性:名称和营养值,提供getter与setter方法,有一个无参的构造方法,在该方法内营养值基数初始为10;

2、分别设计Food的派生类肉类(Meat)、水果类(Fruits)、蔬菜类(Vegetable),这三个类均显式编写无参的构造方法,并分别对营养基础值乘1.7 ,1. 5 , 1.2

3、设计一个烹饪(cooking)接口,包含cookfood()的行为,只有肉类(Meat) ,蔬菜类(Vegetable)实现了该接口,该行为对于肉类可以增长该对象的营养值1.5倍,对于蔬菜类可以增长营养值1.2倍; 4、设计猴子类(Monkey),具有私有属性:名称,体重(直接赋初值10.0),具有公有的行为:

1)觅食(eat):体重会增加,体重增加量是:营养值*0.1;

2)游戏(game):体重降低0.5,若体重在5以下不再下降。

3)开始活动(start):该方法需要传递活动次数参数,具体的觅食还是游戏活动随机,觅食的食物也随机,在吃肉类或蔬菜食品时也是随机对其进行烹饪,且需要输出显示每次活动的情况,游戏输出游戏,是觅食输出所吃食物,如果是蔬菜或肉类还需说明是否进行烹饪)

4)重写toString方法:在控制台打印猴子名称和体重信息。

5)提供公有的getter方法;

5、设计一个测试类Test,该类功能如下:

创建猴子对象,猴子姓名自定,猴子随机进行5-10次活动行为,最后输出猴子的名称和体重。

源代码

首先,定义Food类:

public class Food {
    private String name;
    private double nutrition;

    public Food() {
        this.nutrition = 10.0;
    }

    public String getName() {
        return name;
    }

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

    public double getNutrition() {
        return nutrition;
    }

    public void setNutrition(double nutrition) {
        this.nutrition = nutrition;
    }
}

然后,派生类MeatFruitsVegetable

public class Meat extends Food {
    public Meat() {
        setNutrition(getNutrition() * 1.7);
    }
}

public class Fruits extends Food {
    public Fruits() {
        setNutrition(getNutrition() * 1.5);
    }
}

public class Vegetable extends Food {
    public Vegetable() {
        setNutrition(getNutrition() * 1.2);
    }
}

接下来,定义Cooking接口:

public interface Cooking {
    void cookFood();
}

然后,实现Cooking接口的类MeatVegetable

public class Meat implements Cooking {
    public void cookFood() {
        setNutrition(getNutrition() * 1.5);
    }
}

public class Vegetable implements Cooking {
    public void cookFood() {
        setNutrition(getNutrition() * 1.2);
    }
}

接下来,定义Monkey类:

import java.util.Random;

public class Monkey {
    private String name;
    private double weight;

    public Monkey(String name) {
        this.name = name;
        this.weight = 10.0;
    }

    public void eat(Food food) {
        double weightIncrease = food.getNutrition() * 0.1;
        weight += weightIncrease;
    }

    public void game() {
        if (weight > 5.0) {
            weight -= 0.5;
        }
    }

    public void start(int activityTimes) {
        Random random = new Random();

        for (int i = 0; i < activityTimes; i++) {
            int randomActivity = random.nextInt(2); // 0表示觅食,1表示游戏
            int randomFood = random.nextInt(3); // 0表示肉类,1表示水果,2表示蔬菜

            if (randomActivity == 0) {
                if (randomFood == 0) {
                    Meat meat = new Meat();
                    boolean cook = random.nextBoolean();

                    if (cook) {
                        meat.cookFood();
                    }

                    eat(meat);
                    System.out.println("吃了" + meat.getName() + ",体重增加" + meat.getNutrition() * 0.1);
                } else if (randomFood == 1) {
                    Fruits fruits = new Fruits();
                    eat(fruits);
                    System.out.println("吃了" + fruits.getName() + ",体重增加" + fruits.getNutrition() * 0.1);
                } else if (randomFood == 2) {
                    Vegetable vegetable = new Vegetable();
                    eat(vegetable);
                    System.out.println("吃了" + vegetable.getName() + ",体重增加" + vegetable.getNutrition() * 0.1);
                }
            } else if (randomActivity == 1) {
                game();
                System.out.println("进行游戏,体重减少0.5");
            }
        }
    }

    @Override
    public String toString() {
        return "猴子姓名:" + name + ",体重:" + weight;
    }

    public String getName() {
        return name;
    }

    public double getWeight() {
        return weight;
    }
}

最后,编写测试类Test

public class Test {
    public static void main(String[] args) {
        // 创建猴子对象
        Monkey monkey = new Monkey("小猴");

        // 随机进行5-10次活动行为
        int activityTimes = (int) (Math.random() * 6) + 5;
        monkey.start(activityTimes);

        // 输出猴子的名称和体重
        System.out.println(monkey);
    }
}

这个程序创建了一个猴子对象,并随机进行了5-10次活动行为。最后,输出猴子的名称和体重。

© 版权声明
THE END
喜欢就支持一下吧
点赞10赞赏 分享