zoukankan      html  css  js  c++  java
  • 图解Java多态内存分配解析


    Person worker = new Worker();
    子类实例对象地址赋值给父类类型引用变量。多态的体现。
    worker.startWork(); 为什么调用不到呢?
    因为引用变量worker是父类类型,他会去子类父对象中拿Person类的引用,然后在方法区找到本类的类型信息,定位不到startWork()方法。所以,提示找不到符号。【红色箭头轨迹】
    向上转型,就这么回事。

    ------------------------------
    Worker w = (Worker)worker;
    这么一搞为什么就能调的到了呢?
    引用变量worker持有的本来就是子类对象的引用。
    然后,我把引用赋值给一个子类类型引用变量,然后调用startWork()方法,他就会根据引用找到实例对象,然后实例对象通过持有的引用,找到本类在方法区的类型信息,定位到startWork()方法。ok,定位到了。方法入栈,走你~【绿色箭头轨迹】
    向下转型,也就这么回事,操作的都是同一个实例对象(子类实例对象),只不过是引用在变化,因为两者有继承关系。并且Person worker = new Worker();这条语句建立了两者的关系。

    -----------------------------
    回过头来看第二句,worker.say();照上面那么说,他会去找父类的say方法啊,怎么会执行子类的say方法呢?你如果这么认为,那你就被我骗了,哈哈哈。say方法被重写了,jvm就会调用被子类重写的方法,不要问我为什么,java语言就这么规定的,jvm就那么去实现。。。


    原创文章,转载请注明出处: http://blog.csdn.net/thinging_in_android
  • 相关阅读:
    web fileReader API
    placeholer 改变颜色
    在选择标签中遇到的问题
    选择标签
    cesh
    sui 无限下拉分页
    调用百度地图 API 移动地图时 maker 始终在地图中间 并根据maker 经纬度 返回地址
    两种轮播图实现方式
    CSS多行文本溢出省略显示
    从Python看Web架构的发展
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3060171.html
Copyright © 2011-2022 走看看