当前位置: 移动技术网 > IT编程>开发语言>Java > java面向对象程序设计之狐狸与兔子

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

2020年07月31日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网