不明白为什么创建父类数组传入的对象可以是强制转换的子类

不明白为什么创建父类数组传入的对象可以是强制转换的子类

Animals[] a = new Animals[5];

for (int i = 0; i < a.length; i++) {

Random random = new Random();

int b = random.nextInt(3) + 0;

if (b == 0) {

Animals c = new Catc();

Catc catc = (Catc) c;


a[i] = catc;

} else if (b == 1) {

Animals e = new Dogd();

Dogd dogd = (Dogd) e;

a[i] = dogd;

} else {

Animals f = new Sheep();

Sheep sheep = (Sheep) f;

a[i] = sheep;

}

a[i].cry();

}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕雪 2018-01-04 19:39:58

因为你new的时候是子类,如new Dogd();所它即使是赋值给了父类Animals e = new Dogd();其实追根溯源还是子类Dogd对象,所以最后它是还可以转换为子类的。祝:学习愉快

  • 提问者 慕村7125073 #1
    还有点不清晰,Animals[] a = new Animals[5];将子类对象传入到父类对象数组,为什么就能传进去呢。而且还可以a[i].cry();
    2018-01-05 21:07:02
  • 一叶知秋519 回复 提问者 慕村7125073 #2
    子类对象作为数组元素,是可以传入父类数组的,因为可以进行自动类型转化;通过父类创建子类对象后,可以调用到子类实现的父类方法。祝学习愉快~
    2018-01-07 16:31:40
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师