zoukankan      html  css  js  c++  java
  • java基础:多态过程中的动态绑定

    重刷java-core的chapter05,P158

    重读多态,感觉又不一样了。

    记录一下对象方法执行过程:

    1.  编译器查看对象声明类型和方法名,如class.fuction(param),class声明为A对象,则列出所有A的function(param)和父类中的public的function(param)。

    Employee {
    ...
    getSalary(){} } Manager extends Employee{ ...
    getSalary(){} }
    Manager managerA
    Employee e =managerA
    e.getSalary(){}

      这里会列出 e 的getSalary,e的父类的public的getSalary,e的所有子类的getSalary。

    2. 重载解析overloading resolution :查看调用方法时提供的参数类型。如查看param是int还是String,由于允许类型转换,如int转换成double,son可以转换成father等等,发现多个或者没有匹配的参数,会报错。

    3.如果时private/static/final方法,或者构造器,那么编译器可以准确的知道应该调用哪个方法,这种调用方式成为静态绑定static binding。于此对应的是,调用的方法依赖于隐式参数的实际类型,并且在运行时实现动态绑定,生成调用fuction(param)的指令。

    4.当程序运行,并且采用动态绑定调用方法时,虚拟机一定调用与class所引用对象的实际类型最合适的那个类的方法。假设class的实际类型时son,它是father的子类。如果son定义了fuction(param),就直接调用;否则,调用father的public function(param),以此类推。

       1的例子中,e的实际类型是Employee的子类对象Manager,所以调用Manager的getSalary().

    由于调用方法用搜索,很花时间。虚拟机会先为每个类创建一个方法表,到时候直接从表里面找。

  • 相关阅读:
    JavaScript、Jquery:获取各种屏幕的宽度和高度
    CSS:文字兩端加中線寫法
    CSS:公用
    JavaScript:基礎知識
    jQuery:播放/暂停 HTML5视频[轉]
    手機Web頁面信息
    jQuery:open和opener使用說明
    CSS:overflow使用說明
    jQuery:常用插件
    BootStrap:基礎知識
  • 原文地址:https://www.cnblogs.com/zhizhiyin/p/11095703.html
Copyright © 2011-2022 走看看