Three_Y
Three-Y
采纳率85.7%
2019-09-29 22:31

一道java面试题,关于继承的问题。

已采纳

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

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • weixin_43273271 @班 2年前

    图片说明
    这个还涉及到了多态的问题,首先,多态存在的三个必要条件:继承、重写、父类引用指向子类对象。其次当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。这里的条件都符合多态条件,B继承A,B中重写A的printValue方法,A的引用(as)指向子类B图片说明
    所以输出的是B 而不是A
    还有一点,如果在B中添加一个A没有的方法,你会发现as是不能调用父类A没有而子类B有的方法,这就是多态的原因

    点赞 2 评论 复制链接分享
  • weimingjue 王能 2年前

    java是面向对象的,所谓对象就是一个实体,比如:人。
    现在你new了一个“人”,打印走路方法结果是“直立行走”
    “人”当然也属于“动物类“了,然后你把他放到“动物类里”,再打印走路方法,当然还是“直立行走”了,他虽然在“动物类“里关着,但本质还是“人”。
    这就是面向对象和面向过程的区别之一。

    点赞 评论 复制链接分享
  • guangcaiwudong Kevin.Y.K 2年前

    尽管强转为ClassA,但本质还是ClassB,主要是ClassB重写了ClassA的printValue方法,你可以尝试一下先去掉ClassB中printValue方法

    点赞 评论 复制链接分享