翁恺⽼师的讨论,狐狸与兔⼦【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();
}
yes man
fox新闻return ret;
恋恋笔记本台词
sour是什么意思}
//Fox类
@Override
public Animal breed()
{
Animal ret=null;
if(sBreedable()&&Math.random()<0.5)
{
silence的意思
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(){
return0.12;
}
Fox类实现:
@Override
public Animal breed(){
return super.breed();
}
@Override
public Animal getAnimal(){
法硕考研培训return new Fox();
}
英语沙龙下载
@Override
public double getValue(){
return0.5;
}
更改之后的代码具有更好的可扩展性,内容可以直接在Animal⾥⾯加,不⽤分别在Rabbit和Fox单独加内容,消除了重复代码,这是⼀个良好的代码。
补⼀个Java关键字,为下⼀篇的注释做准备:
instanceof关键字,它是⽤来检验该对象是某个类的实例:
/*
author
Main.java
*/
btximport 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 类的实例");
el if(o instanceof ArrayList)
System.out.println("对象是 java.util.ArrayList 类的实例");
el
System.out.println("对象是 "+ o.getClass()+" 类的实例");
}
}
代码来⾃"菜鸟学java"
运⾏结果:对象是 java.util.ArrayList 类的实例