Java在父类中如何创建子类对象?

1、PublicabstractclassAnimal{publicabstractAnimalbreed();}2、publicclassFoxextendsAnima... 1、Public abstract class Animal{
public abstract Animal breed();
}
2、public class Fox extends Animal{
@Override
public Animal breed() {
Animal ret = null;
if ( isBreedable() && Math.random() < 0.5) {
ret = new Fox();
}
return ret;
}
}
3、public class Rabbit extends Animal{
@Override
public Animal breed() {
Animal ret = null;
if ( isBreedable()&& Math.random() < 0.12) {
ret = new Rabbit();
}
return ret;
}
4、问题:Fox.breed()和Rabbit.breed()几乎一样,
有什么好办法修改?注意Fox和Rabbit的breed()返回的具体类型不同。
展开
 我来答
软件开发领路人
2020-06-07 · 解答软件开发新人的问题烦恼
软件开发领路人
采纳数:711 获赞数:408

向TA提问 私信TA
展开全部
你好,很高兴回答你的问题。
可以进行如下修改,将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();
}
如果有帮助到你,请点击采纳。
我解答的大部分是软件开发新人遇到的问题,如果有兴趣可以关注我。
百度网友7cd29db
2020-08-17 · TA获得超过213个赞
知道小有建树答主
回答量:186
采纳率:66%
帮助的人:77.7万
展开全部
其实这个问题算是如何应用设计模式里面的工厂模式, 在父类作为一个工厂去创建子类,前提是父类需要知道所有的子类。最简单的修改如下,关于返回的对象可以进行强制转换后使用。
Public abstract class Animal{
public Animal breed(){
Animal ret = null;
if ( this instanceof Fox && isBreedable() && Math.random() < 0.5) {
ret = new Fox();
} else if(this instanceof Rabbit && isBreedable() && Math.random() < 0.12){
ret = new Rabbit();
} // 都不满足的话我们返回null
return ret;
}
public class Fox extends Animal{

}

public class Rabbit extends Animal {

}
欢迎关注我的微公号: 某鸟碎碎, 推送各种java入门教学,java框架学习,顺便解答java学习问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
草原上之狼
高粉答主

2020-06-07 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.9万
采纳率:93%
帮助的人:4096万
展开全部
下面是三个子类:
Sub1 sub1=new Sub1();
Sub2 sub2=new Sub2();
Sub3 sub3=new Sub3();
对象数组:
Acar[] acars=new Acar[3];
赋值:
acars[0]=(Acar)sub1;
acars[1]=(Acar)sub2;
acars[2]=(Acar)sub3;
如果要调用这个对象数组中的第一个元素的方法(假如它实现了print1()方法)。需要这么写:
acars[0].print1();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式