开发者社区> 问答> 正文

[@倚贤][¥20]子类方法a中调用父类的方法b,在父类的方法b中调用父类自己的另一个方法c,子类重写这个c方法后,为什么父类会调用到子类重写的c方法?

子类方法a中调用父类的方法b,在父类的方法b中调用父类自己的另一个方法c,子类重写这个c方法后,为什么父类会调用到子类重写的c方法?

展开
收起
太原周杰伦 2018-10-31 20:47:08 2267 0
4 条回答
写回答
取消 提交回答
  • 乐分享爱学习,Android 前端 后端 AI等均有一些分享,一起学习,一起进步
    1. 如果创建的是父类,调用C的时候,应该是调用的父类的C方法,而不是子类重写的
    2. 如果创建的是子类(不论声明为父类还是子类),调用C的时候,都是调用子类重写后的C方法。
      关键还是看你创建的是父类还是子类(跟声明无关哈)
    2019-07-17 23:11:37
    赞同 展开评论 打赏
  • 实际上父类里面,b调用c是不是会走到子类的c方法,是不一定的,要看你创建的对象本身是父类还是子类的实例,如果是父类的实例,b调用c只会走到父类的c方法,只有创建子类的实例的时候,才会走到子类的c方法。因为java查找方法的时候,要看首先这个对象是哪个类的实例,优先以这个类为对象搜索。

    2019-07-17 23:11:37
    赞同 展开评论 打赏
  • 全栈工程师,从事了 12 年以 Java 语⾔为主的软件开发工作,热衷于整合框架与开发工具,关注 交互设计,喜欢写技术博客(http://codelife.me/),Linux拥趸,问题终结者。近期开始学习和关注 Elixir 函数语言,合作翻译了《Elixir 程序设计》。

    这个问题设计到两个基础知识的工作原理

    1. 继承,子类继承父类,具体实现原理是,现在之类方法列表找,找不到就是找父类方法列表,所以之类方法列表有优先级
    2. 动态绑定,当某个实例调用某个方法才去找对应方法,而不是编译时。

    解释一下上面的问题:
    子类方法 a 中父类方法 b,重点是调用方法 a 的实例是子类实例,虽然没有说明,但是可以猜出来。虽然后面进入了父类的方法,但是实例只要是子类的,还是会优先查找子类的方法列表,找不到再去查找父类的方法列表。

    2019-07-17 23:11:37
    赞同 展开评论 打赏
  • 前一个帐号wangccsy@126.com不知道怎么的就成了企业帐号,改不成个人。所以重新注册了一个个人帐号。老程序员。精通JAVA,C#,数据库,对软件开发过程和流程熟悉。考取系统分析师,项目管理师和系统架构设计师等软件资格考试认证。愿意和大家一起前进。

    主要原因是你的子类重载了父类的方法。父类的方法相当于被隐藏了一样。

    2019-07-17 23:11:37
    赞同 1 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
继承与功能组合 立即下载
低代码开发师(初级)实战教程 立即下载