美文网首页
多态的理解以及动态绑定机制

多态的理解以及动态绑定机制

作者: Fizor | 来源:发表于2017-01-17 21:21 被阅读0次

    <p>关于多态:Father f=new Son();要记住的无非
    <ol>
    <li>静态变量和方法:编译和运行看左边(父类)</li>
    <li>成员变量:编译和运行看左边</li>
    <li>成员方法:编译看左边,运行看右边</li>
    </ol>
    </p>
    <p>关于这些的理解找了网上的一些东西</p>
    <h4>(1)静态和动态绑定机制(static binding and auto binding)</h4>
    <p>静态绑定是指在编译期间JVM就确定了变量的值或者具体的方法的机制,而动态绑定是在运行时根据具体在堆中创建的对象JVM进行确认的。所有的成员变量,静态方法,final方法以及private修饰的方法(其实private默认带final)都采用的是静态绑定机制,而成员方法采用的是动态绑定。具体情况就是编译阶段进行类的加载时,会将各种静态放入方法区,各种常量以及方法名称和final方法放入常量池,然后会构造一个方法表,每个类都有一个方法表,是在编译的时候就确认的,放置着方法和其在方法区位置的对应关系,这个就是动态绑定机制的实现关键,顺序根据从父到子的顺序放置,如果出现重写方法(overwrite)则直接改变其地址。所以在编译时,如果father没有该方法,则father类的方法表中无此记录,调用则会发生编译错误(编译并未创建对象根据数据类型判断),所以编译看左边,而运行时,f为son的引用,调用方法时JVM根据f引用找到位于堆区的son对象,然后找到son类的方法表,调用方法,所以运行看右边。</p>

    相关文章

      网友评论

          本文标题:多态的理解以及动态绑定机制

          本文链接:https://www.haomeiwen.com/subject/csqvbttx.html