黑马程序员技术交流社区
标题:
父类对象赋值给子类对象后的成员方法问题
[打印本页]
作者:
爱如kongcheng
时间:
2015-4-23 11:06
标题:
父类对象赋值给子类对象后的成员方法问题
假设A是父类对象,B是子类对象,
B重写了A的成员方法,现在 A a=new B();
a调用的成员方法是重写前的(父类自己的)还是重写后的(子类自己的)?
大家有明白的这块内容的,请详细讲解一下,不单单只是要一个结果。
作者:
李成强
时间:
2015-4-23 11:16
您的这个问题可以自己写代码运行一下就知道答案了呀。
作者:
李成强
时间:
2015-4-23 11:20
或者你应该这样问:为什么调用的是子类的呢?这就叫多态了,你为什么要覆盖父类的方法,不就是想让调用的时候执行你子类的方法,不然你就不会去覆盖了。
作者:
爱如kongcheng
时间:
2015-4-23 11:26
李成强 发表于 2015-4-23 11:16
您的这个问题可以自己写代码运行一下就知道答案了呀。
我其实知道结果的,想让大家详细讲讲原理是什么?
最好讲的稍微深一点儿。
作者:
l763631191
时间:
2015-4-23 11:37
A a=new B(); A的引用指向的是其子类对象,这种情况,当a调用的是普通的方法,编译的时候他找的是A中的成员方法,运行的时候就使用的是B 中复写的方法,也就是最后得到的结果是调用B中方法的结果。
简单总结是:当调用的是普通方法,编译的时候看左边,运行的时候用的是右边。
调用成员变量,编译和运行都只看左边变量的结果。
调用是静态方法时,也只是看左边。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2