可以进行如下修改,将breed的实现移到抽象父类Animal中,略做修改,修改后代码如下
public Animal breed(){
Animal ret =null
if(isBreedable() &&Math.random()<getValue()){
ret=getAnimal()
}
return ret
}
父类Animal中增加如下两个抽象方法:
public abstract double getValue()
public abstract Animal getAnimal()
在Fox中不再需要实现breed,实现新定义的两个方法:
public abstract double getValue(){
return 0.5
}
public abstract Animal getAnimal(){
return new Fox()
}
在Rabbit类中类似处理:
public abstract double getValue(){
return 0.12
}
public abstract Animal getAnimal(){
return new Rabbit()
}
如果有帮助到你,请点击采纳。
我解答的大部分是软件开发新人遇到的问题,如果有兴趣可以关注我。
楼主问的是你解决问题的那段代码的意义吧,楼上的回答实在是让人不知所云啊。A是父类。B和C继承A。
A b = new B()
A c = new C()
这个就不用我啰嗦了吧,Java的多态。
String str = "B"
A a = (A) Class.forName(str).newInstance()
我来解释一下它吧,这个技术叫反射,主要意思就是在编译的时候不指定要创建哪个的对象,而在执行过程中才去指定。不明白请百度百科JAVA反射机制。Class.forName(str)加载类名叫str的那个类,newInstance()创建该类的对象,因为Java并不知道实例化的类是谁,所以返回对象是Object对象,这就需要造型(A) Class.forName(str).newInstance()这样就返回了A类对象,楼主明白否?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)