Pfeffer
2017-08-05 07:01
采纳率: 53%
浏览 1.2k
已采纳

在java中,子类数组的引用可以转换成超类数据的引用,而不需要采用强制类型转换.

图片说明
上面标记的拿个不存在的实例域是啥意思,其他的我都能看懂

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • JavaTree2017 2017-08-05 07:17
    已采纳

    子类的引用转换为超类的引用是不会出现问题的,属于向前转型
    因为子类本身就属于超类,是is a的关系,但是调用staff[0] = new Employee(...) 的操作的时候,
    实际上staff这个数组指向的是Manager的数组,而这个new只会将employee对象中的属性初始化,然而去调用manager[0]的时候,
    我们知道manager[0]实际上不是Manager对象而是Employee对象,这个对象是没有setBonus这个方法的,但是因为我们使用的引用是manager,也就是第一行创建的Manager[]数组,这里就会发生向后转型
    但是超类的集合是小于子类的集合的,导致超类部分已经被初始化,而子类部分没有被初始化,
    因此调用超类没有的setBonus实际上是对Employee对象的调用,而这个对象根本没有这部分

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • Pfeffer 2017-08-05 07:38

    可不可以这么理解,刚开始的时候manager数组和employee数组指向的是同一块在堆中的区域,但是当调用staff[0] = new Employee(...) 的操作的时候,,Staff[0]的指向便发生了变化,实际上manager还没有实例化,这个时候manager[0]并没有被实例化

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题