A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

假设A是父类对象,B是子类对象,
B重写了A的成员方法,现在  A a=new B();
a调用的成员方法是重写前的(父类自己的)还是重写后的(子类自己的)?

大家有明白的这块内容的,请详细讲解一下,不单单只是要一个结果。

4 个回复

正序浏览
A a=new B();  A的引用指向的是其子类对象,这种情况,当a调用的是普通的方法,编译的时候他找的是A中的成员方法,运行的时候就使用的是B 中复写的方法,也就是最后得到的结果是调用B中方法的结果。
     简单总结是:当调用的是普通方法,编译的时候看左边,运行的时候用的是右边。
                       调用成员变量,编译和运行都只看左边变量的结果。
                       调用是静态方法时,也只是看左边。
回复 使用道具 举报
李成强 发表于 2015-4-23 11:16
您的这个问题可以自己写代码运行一下就知道答案了呀。

我其实知道结果的,想让大家详细讲讲原理是什么?
最好讲的稍微深一点儿。
回复 使用道具 举报
或者你应该这样问:为什么调用的是子类的呢?这就叫多态了,你为什么要覆盖父类的方法,不就是想让调用的时候执行你子类的方法,不然你就不会去覆盖了。
回复 使用道具 举报
您的这个问题可以自己写代码运行一下就知道答案了呀。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马