2019.09.27 随笔(方法调用)
Posted njuptzheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019.09.27 随笔(方法调用)相关的知识,希望对你有一定的参考价值。
编译器查看对象的声明类型和方法名。
假设调用的是x.f(param),x为C类隐式参数对象。编译器会一一列举C类中所有名为f的方法和其超类中访问属性为public且名为f的方法。(超类的私有方法不可访问)
public void raiseSalary(double byPercent) {
double raise = salary * byPercent/100;
salary += raise;
}
其中的this.salary为隐式参数,即出现在方法名前的类对象。byPercent为显示参数。很明显,显式参数是明显的列在方法中的,隐式参数没有出现在方法中。
- 编译器将查看调用方法时提供的参数类型。
? 如果在所有名为f的方法中存在一个方法的参数类型与调用方法提供的实参类型匹配,就选择这个方法,这个过程称为重载解析。若调用x.f("Hello"),则编译器会挑选f(String)。
静态绑定:如果是private方法、static方法、final方法或者构造器。那么编译器将可以准确的知道应该调用那个方法,我们将这种调用方式称为静态绑定。
动态绑定:调用的方法依赖于隐式参数的实际类型,并且在运行时实现调用那个方法,我们称这种调用方式为动态绑定。
当程序运行,并采用动态绑定调用方法时,虚拟机一定调用与x所引用对象的实际类型最合适那个类的方法,假设x的实际类型是D,它是Cr的子类,如果D类定义了方法f(String),就直接调用它,否则将在D类的超类Father中寻找f(String),依次类推。即从子类到父类进行搜索。
以上是关于2019.09.27 随笔(方法调用)的主要内容,如果未能解决你的问题,请参考以下文章