aaqian1
2020-12-13 16:24
采纳率: 20%
浏览 69

在向上转型中,向上转型的对象只有调用子类覆写父类的方法时,调用的才是子类的方法吗?

比如Father fson = new Son(); 中,

情况1:fson调用函数funcA("haha"),这个函数在父类中有定义funcA(Object s),同时子类中重载了这个方法funcA(String s),但是实际调用的是父类中的funcA;

情况2: 当调用父类中定义的静态方法时,调用的也是父类的,即使子类中有同名的方法也不行。

 

这个的原理是什么呢?向上转型和静态绑定之间的关联又是什么呢???

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • Never__GiveUp 2020-12-13 21:34

    额,这个吧,1.子类应该不叫重载,叫重写(override),2.调用普通方法的时候,怎么可能是调用父类的呢?

    在多态中,

    一、如果是方法的话,是编译看父类,运行看子类的(就是说子、父类中都有这个方法才能编译通过,到了运行的时候执行子类的方法)

    二、如果是变量或者静态方法的话,是编译看父类,运行看父类的

    我也是小白,仅供参考,共同进步,哈哈

    打赏 评论
  • 荆州拉人去编程 2020-12-14 09:17

    情况1:首先,父类和子类的funcA方法,因为入参不同,并没有构成重写。重写要求参数列表必须一样。在没有构成重写的情况下,用父类的引用变量指向子类对象的情况下(就是你问题中的这种情况),肯定是只调用父类的方法的。

    情况2:你是不是用变量名调用的静态方法?首先不推荐用变量名调用静态方法,应该用类名调用。其次,变量名调用静态方法,只取决于这个变量的是什么类。因为fson是Father类,所以肯定调用的是Father类的那个静态方法。和fson具体指向的是不是Person类的对象没有关系。

    打赏 评论
  • aaqian1 2020-12-14 11:47

    #

     

    打赏 评论
  • 荆州拉人去编程 2020-12-14 12:07

    忘了打个广告哈哈哈。这个问题在我的这篇文章里面有讲:我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《Java基础(二)——面向对象和类》, 一起来围观吧 https://blog.csdn.net/w764476876/article/details/109188859?utm_source=app

    打赏 评论

相关推荐 更多相似问题