翁恺老师的讨论,狐狸与兔子【0】

Fox.breed()和Rabbit.breed()几乎一样
Fox.breed()和Rabbit.breed()几乎一样,有什么好办法修改?注意Fox和Rabbit的breed()返回的具体类型不同。

修改之前的代码:

	//Animal类     
	public abstract Animal breed(); 
	
	//Rabbit类 
	@Override public Animal breed() 
	{ 
		Animal ret=null; 
		if(sBreedable()&&Math.random()<0.12) 
		{ 
			ret=new Rabbit(); 
		} 
		return ret; 
	} 
	
	//Fox类
	@Override 
	public Animal breed() 
	{ 
		Animal ret=null; 
		if(sBreedable()&&Math.random()<0.5) 
		{ 
			ret=new Fox(); 
		} 
		return ret; 
	}

修改之后:
Animal类:

public Animal breed()
	{
		Animal ret=null;
		if(isBreedable()&&Math.random()<getValue())
		{
			ret=getAnimal();
		}
		return ret;
	}

	public abstract Animal getAnimal();
	public abstract double getValue();

把其中的变量都变成抽象函数,实现的时候传回参数

Rabbit类实现:

	@Override
	public Animal breed() {
		return super.breed();
	}
	
	@Override
	public Animal getAnimal() {
		return new Rabbit();
	}

	@Override
	public double getValue() {
		return 0.12;
	}

Fox类实现:

	@Override
	public Animal breed() {
		return super.breed();
	}
	
	@Override
	public Animal getAnimal() {
		return new Fox();
	}

	@Override
	public double getValue() {
		return 0.5;
	}

更改之后的代码具有更好的可扩展性,内容可以直接在Animal里面加,不用分别在Rabbit和Fox单独加内容,消除了重复代码,这是一个良好的代码。

补一个Java关键字,为下一篇的注释做准备:
instanceof关键字,它是用来检验该对象是某个类的实例:

/*
 author by runoob.com
 Main.java
 */
import java.util.ArrayList;
import java.util.Vector;
 
public class Main {
 
public static void main(String[] args) {
   Object testObject = new ArrayList();
      displayObjectClass(testObject);
   }
   public static void displayObjectClass(Object o) {
      if (o instanceof Vector)
      System.out.println("对象是 java.util.Vector 类的实例");
      else if (o instanceof ArrayList)
      System.out.println("对象是 java.util.ArrayList 类的实例");
      else
      System.out.println("对象是 " + o.getClass() + " 类的实例");
   }
}

代码来自"菜鸟学java"
运行结果:对象是 java.util.ArrayList 类的实例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值