多态继承的运行时绑定
来源:互联网 发布:淘宝上在哪申请信用卡 编辑:程序博客网 时间:2024/06/07 21:04
今天在博客上看见一道多态的执行顺序题,如下
然而运行后结果却是:
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied
也就是说,在执行父类构造方法的时候,已经执行子类重写后的方法了。
根据我的理解,应该是运行时绑定在作祟,当子类新建对象时,父类调用被子类重写过的方法,那么编译器就会判定,应该将该方法编译为子类重写的方法。
我想了好久,除了这个解释应该没别的原因,如果我错了,请私信我。
啊,本来每天11.30准时睡觉的,为了解决这个问题拖了一小时还没洗澡.....不过蛮开心的,碎觉。
public class Dervied extends Base { private String name = "dervied"; public Dervied() { tellName(); printName(); } public void tellName() { System.out.println("Dervied tell name: " + name); } public void printName() { System.out.println("Dervied print name: " + name); } public static void main(String[] args){ new Dervied(); }}class Base { private String name = "base"; public Base() { tellName(); printName(); } public void tellName() { System.out.println("Base tell name: " + name); } public void printName() { System.out.println("Base print name: " + name); }}
我原本以为答案是这样的:
Base tell name: null
Base print name: null
Dervied tell name: dervied
Dervied print name: dervied
然而运行后结果却是:
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied
也就是说,在执行父类构造方法的时候,已经执行子类重写后的方法了。
根据我的理解,应该是运行时绑定在作祟,当子类新建对象时,父类调用被子类重写过的方法,那么编译器就会判定,应该将该方法编译为子类重写的方法。
我想了好久,除了这个解释应该没别的原因,如果我错了,请私信我。
啊,本来每天11.30准时睡觉的,为了解决这个问题拖了一小时还没洗澡.....不过蛮开心的,碎觉。
0 0
- 多态继承的运行时绑定
- 深入浅出OOP(三): 多态和继承(动态绑定/运行时多态)
- 深入浅出OOP(三): 多态和继承(动态绑定/运行时多态)
- 运行时的多态与多重继承
- 多态运行期的行为 --(晚绑定)
- Java运行时绑定
- 运行时绑定
- Flex 运行时绑定
- C++ 运行时绑定
- object-c 继承、多态动态绑定 第八天
- B 类 对象 继承 多态与动态绑定
- 继承与多态,动态绑定,final,abstract
- 使用最新的AIR3 Beta2的运行时绑定功能
- 关于继承中子类和父类中构造函数和析构函数运行的顺序,和继承的多态
- 第二天: 多态运行期间动态绑定的一个案例
- Java向上转型的思考(运行时绑定)
- 在运行程序时发现绑定句柄无效的解决方法
- iOS运行时的用途二 -- 绑定属性
- java中自定义异常和finally唯一不执行的情况
- 线性支持向量机中最优参数b
- ImageLoder画圆
- Android中解析数据集合的写法
- iOS生命周期
- 多态继承的运行时绑定
- JAVA中的protected(详解),以及和clone()方法有关的一些问题
- android控件weight
- android端通过接口获取数据库中数据
- 堆栈分析
- android 百度定位
- DOMchildNOdes
- jQuery零碎相关
- xListview