码迷,mamicode.com
首页 > 其他好文 > 详细

2019.09.27 随笔(方法调用)

时间:2019-09-28 00:45:43      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:并且   fat   string   定义   方法   重载解析   class   double   现在   

  1. 编译器查看对象的声明类型和方法名。

       假设调用的是x.f(param),x为C类隐式参数对象。编译器会一一列举C类中所有名为f的方法和其超类中访问属性为public且名为f的方法。(超类的私有方法不可访问)
public void raiseSalary(double byPercent) {    
    double raise = salary * byPercent/100;    
    salary += raise;
}

其中的this.salary为隐式参数,即出现在方法名前的类对象。byPercent为显示参数。很明显,显式参数是明显的列在方法中的,隐式参数没有出现在方法中。

  1. 编译器将查看调用方法时提供的参数类型。

? 如果在所有名为f的方法中存在一个方法的参数类型与调用方法提供的实参类型匹配,就选择这个方法,这个过程称为重载解析。若调用x.f("Hello"),则编译器会挑选f(String)。

  1. 静态绑定:如果是private方法、static方法、final方法或者构造器。那么编译器将可以准确的知道应该调用那个方法,我们将这种调用方式称为静态绑定。

    动态绑定:调用的方法依赖于隐式参数的实际类型,并且在运行时实现调用那个方法,我们称这种调用方式为动态绑定。

  2. 当程序运行,并采用动态绑定调用方法时,虚拟机一定调用与x所引用对象的实际类型最合适那个类的方法,假设x的实际类型是D,它是Cr的子类,如果D类定义了方法f(String),就直接调用它,否则将在D类的超类Father中寻找f(String),依次类推。即从子类到父类进行搜索。

2019.09.27 随笔(方法调用)

标签:并且   fat   string   定义   方法   重载解析   class   double   现在   

原文地址:https://www.cnblogs.com/njuptzheng/p/11600950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!