java多态实例


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;
	}
	
	
	

}
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值