public class Test {
/*
* 开发一个食物类Food,具体要求如下:
1.具有私有属性:营养值,提供公有的get方法和保护的set方法。
2.有一个保护的无参的构造方法,在该方法内营养值由1-10之间的随机数产生
3.包含一个公有的获取食物名称的方法
4.添加主方法测试
分别开发Food类的三个派生类:肉制品类、淀粉类和水果蔬菜类,要求:
1.这三个类均显式编写无参的构造方法,并分别对营养值乘以1.2 , 0.7 , 0.9 处理;
2.这三个类均重写父类的获取食物名称的方法,
3.并测试。
开发一个猴子类Monkey,具体要求如下:
1.具有私有属性:名称,体重(直接赋初值10.0),两者均提供公有的get方法。
2.仅有一个公有的有参构造方法:构造方法的参数为名称
3.具有一个公有的,参数是Food类型,无返回值的eat(Food food)方法,其功能是吃食物(
在控制台打印猴子名称和食物名称等信息),同时体重会增加,体重增加量是:营养值*0.1
4.具有一个公有的,无参的,无返回值的game()方法,其功能是游戏(可在控制台打印信息),
体重降低0.5,若体重在5以下不再下降。
5.重写toString方法
6.添加主方法测试。
开发一个管理类,该类功能如下:
创建1个猴子,猴子进行100次吃食物和游戏,具体每次吃食物还是游戏是随机的,
而且获取食物也是随机的可能是肉制品,水果蔬菜制品和淀粉制品。最后输出这个猴子的名称和体重。
注:可以根据需要自由设计该类。
*
*/
public static void main(String[] args) {
Monkey m = new Monkey("齐天大圣");
Food food = null;
for(int i=1;i<=100;i++){
int num = (int)(Math.random()*2+1);
//当数字是1的时候,吃食物,2的时候玩游戏
if(num==1){
int num1 = (int)(Math.random()*3+1);
if(num1==1){ //肉
food = new Meat();
food.setName("红烧肉");
m.eat(food);
}else if(num1==2){//淀粉
food = new Starch();
food.setName("土豆");
m.eat(food);
}else{//水果
food = new Fruit();
food.setName("香蕉 ");
m.eat(food);
}
//吃食物信息打印
System.out.print(m.getName()+"吃:"+food.getName()+"体重:");
System.out.printf("%.1f",m.getWeight());
System.out.println();
}else{
m.game();
//玩游戏信息打印
System.out.print(m.getName()+"玩游戏体重:");
System.out.printf("%.1f",m.getWeight());
System.out.println();
}
}
}
}
/*
* 1.具有私有属性:营养值,提供公有的get方法和保护的set方法。
2.有一个保护的无参的构造方法,在该方法内营养值由1-10之间的随机数产生
3.包含一个公有的获取食物名称的方法
4.添加主方法测试
*/
public class Food {
private double cuilinarylValue;
private String name;
public Food(){
this.cuilinarylValue = Math.random()*9+1;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getCuilinarylValue() {
return cuilinarylValue;
}
public void setCuilinarylValue(double cuilinarylValue) {
this.cuilinarylValue = cuilinarylValue;
}
}
public class Fruit extends Food {
private String name;
public Fruit(){
this.setCuilinarylValue(super.getCuilinarylValue()*0.9);
}
//重写父类的获取食物的名称方法
@Override
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
/*
* 分别开发Food类的三个派生类:肉制品类、淀粉类和水果蔬菜类,要求:
1.这三个类均显式编写无参的构造方法,并分别对营养值乘以1.2 , 0.7 , 0.9 处理;
2.这三个类均重写父类的获取食物名称的方法,
3.并测试。
*/
public class Meat extends Food {
private String name;
public Meat(){
super();
//肉类的营养值
this.setCuilinarylValue(super.getCuilinarylValue()*1.2);
}
public void setName(String name) {
this.name = name;
}
//重写父类的获取食物的名称方法
@Override
public String getName() {
return this.name;
}
}
public class Starch extends Food {
/*
* /*
* 分别开发Food类的三个派生类:肉制品类、淀粉类和水果蔬菜类,要求:
1.这三个类均显式编写无参的构造方法,并分别对营养值乘以1.2 , 0.7 , 0.9 处理;
2.这三个类均重写父类的获取食物名称的方法,
3.并测试。
*/
private String name;
public Starch(){
this.setCuilinarylValue(super.getCuilinarylValue()*0.7);
}
//重写父类的获取食物的名称方法
@Override
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
public class Monkey {
/*
* 开发一个猴子类Monkey,具体要求如下:
1.具有私有属性:名称,体重(直接赋初值10.0),两者均提供公有的get方法。
2.仅有一个公有的有参构造方法:构造方法的参数为名称
3.具有一个公有的,参数是Food类型,无返回值的eat(Food food)方法,
其功能是吃食物(在控制台打印猴子名称和食物名称等信息),同时体重会增加,体重增加量是:营养值*0.1
4.具有一个公有的,无参的,无返回值的game()方法,其功能是游戏(可在控制台打印信息),体重降低0.5,
若体重在5以下不再下降。
5.重写toString方法
6.添加主方法测试。
*
*/
private String name;
private double weight = 10.0;
//参数传递Food类型 父类类型,方法那一头,传递子类对象 ,多态的体现形式
public void eat(Food f){
this.weight+=f.getCuilinarylValue()*0.1;
//(在控制台打印猴子名称和食物名称等信息)
}
//具有一个公有的,无参的,无返回值的game()方法,其功能是游戏(可在控制台打印信息),体重降低0.5,
若体重在5以下不再下降。
public void game(){
if(this.weight<5){
System.out.println("太虚弱了,该进食了!!");
return;
}
this.weight-=1;
}
public Monkey(String name){
this.name = name;
}
public String getName() {
return name;
}
public double getWeight() {
return weight;
}
}