题目描述
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;
}
}
然后,派生类Meat
、Fruits
和Vegetable
:
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
接口的类Meat
和Vegetable
:
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次活动行为。最后,输出猴子的名称和体重。