欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java面向对象程序设计之狐狸与兔子

程序员文章站 2022-06-30 20:01:51
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()&...

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 类的实例

本文地址:https://blog.csdn.net/weixin_43688665/article/details/107690307