请教一下,为什么第二个输出不是A?谢谢
虽然objectB原来的引用是classB,但是不是强转成classA后才赋给as的吗?
是因为as指向的是objectB仍然定义为classB,所以强转成classA的操作不起作用吗?

一道java面试题,关于继承的问题。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- @班 2019-09-30 11:04关注
这个还涉及到了多态的问题,首先,多态存在的三个必要条件:继承、重写、父类引用指向子类对象。其次当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。这里的条件都符合多态条件,B继承A,B中重写A的printValue方法,A的引用(as)指向子类B
所以输出的是B 而不是A
还有一点,如果在B中添加一个A没有的方法,你会发现as是不能调用父类A没有而子类B有的方法,这就是多态的原因本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报