黑马程序员技术交流社区

标题: 怎么理解成员函数在多态调用时,编译看左边,运行看右... [打印本页]

作者: djbcool    时间: 2015-1-15 11:03
标题: 怎么理解成员函数在多态调用时,编译看左边,运行看右...
本帖最后由 djbcool 于 2015-1-16 11:26 编辑

这是在毕老师在讲多态中非静态函数成员特点的时候总结过的一句话,我不是很理解看左边和看右边指的是什么。哪位同学理解其中含义?
作者: 月老~牵红线    时间: 2015-1-15 11:37
多态中成员函数会存在覆盖。比如Animal a=new Cat();如果a调用了一个方法show。在编译时期看左边,就是先看a所属的类Animal中是否有这个方法,如果有,编译通过,没有就编译失败。在运行时期看右边,就是看Cat中是否复写了show方法,没有复写就运行父类的那个方法,如果复写了,就运行Cat类中复写后的show方法
作者: 诺诺    时间: 2015-1-15 12:24
月老~牵红线 发表于 2015-1-15 11:37
多态中成员函数会存在覆盖。比如Animal a=new Cat();如果a调用了一个方法show。在编译时期看左边,就是先看 ...

正解!..................
作者: 老外    时间: 2015-1-15 12:57
我感觉就是,编译看左边,就是看编译能否通过,而运行结果,是跟右边有关系,结果是右边的那个类中的方法!
作者: 没胡子的小眼睛    时间: 2015-1-15 13:09
左边应该是看有没有报红线就是编译错误 右边应该就是运行时的错误了吧
作者: djbcool    时间: 2015-1-15 13:55
月老~牵红线 发表于 2015-1-15 11:37
多态中成员函数会存在覆盖。比如Animal a=new Cat();如果a调用了一个方法show。在编译时期看左边,就是先看 ...

很感谢,看完后秒懂!
作者: 鹰击长空168    时间: 2015-1-15 22:14
多态中,编译均看父类,运行才有区分
作者: syz1993    时间: 2015-1-16 14:45
在编译时期,java虚拟机只检查左边有没有这个方法,有就通过,在运行时期虚拟机会调用右边的这个方法,有就运行这个方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2