• java中复写,以及向上转型的(转载)


    Java中的多态是如何实现的?父类引用指向子类实例时,父类引用调用方法时,jvm是如何动态地调用子类中的对应的方法?如下有两个类B和A,其中B继承A,B覆盖了A类中的test方法。

    public Class A{
    public test(){
    }
    }
    public Class B extends A{
    public test(){
    }
    }
    A a=new B();
    a.test();
    其中jvm是如何动态地调用B类中的test 方法?
     
     
    1. a声明为类型A是方便编译器能够编译时检查a是否可以调用test()方法,在实际运行时JVM记录a的实际类型是B;
    2. 在JVM中,B有一张方法表(分为多行),每一行的内容是方法名和指向方法实现的指针;如果是继承自A、而没有自己实现的方法,则可以将指针直接指到A的相关的方法实现;
    3. 在运行时,找到B的的方法表,顺着test()方法的指针找到方法实现,对a执行就可以了。
    另:
    • 至于JVM能够记录a的实际类型是B,则太简单了,单凭因为a = new B()就能知道B才是a的实际类型。JVM可以记录一个指针,使得a指向类B。
    • 仅参考《深入JVM虚拟机》一书的相关章节就能找到答案;当然参考<The JVM Specifications>也是可以的。
      总结:很多行为就是为了忽悠编译器的,为了编译通过。
    1.这里只记录一些学习笔记 2.这里只记录一些学习心得,如果心得方向有错,请留言 2.这里只记录一些日记(只为提升英语,暂时有点忙,等转行了开始写)
  • 相关阅读:
    jquery处理鼠标左中右键事件
    bootstrap弹出框
    移动端去掉a标签点击时出现的背景
    sessionStorage
    页面滑动到最下面,执行代码
    判断页面时向上滚动还是向下滚动
    sql 时间查询 /sql中判断更新或者插入/查询一年所有双休日
    求取最大值
    Repeater 获取数据值
    加载完毕后执行计算
  • 原文地址:https://www.cnblogs.com/liyang31tg/p/3387101.html
Copyright © 2020-2023  润新知