—参数的类型不同
那么我们在调用其中一个被重载的方法时,Java是如何去寻找到相应的方法的呢?
我们知道Java中的方法是一个实现某种功能的具体程序段,程序段拥有方法名,入口(参数类表),和出口(返回值类型或者void)。Java通过方法名和参数类表调用相应具体方法。
以下讨论的是如何从一个类中寻找可调用的重载方法(假设Java已经通过对象类型或者类名寻找方法所在类):
第一步,判断方法名:
寻找与调用者调用方法名相同的方法
第二步,判断参数个数:
在第一步基础上,寻找与调用者传入参数个数相同的的方法
第三步,判断参数匹配程度:
在前两步基础上,Java会给所有符合参数类型方法一个匹配值
第四步,调用匹配程度最高的方法
对于前面两步是非常好理解的,对于第三步很多人在学习Java重载的时候容易忽略,往往认为寻找的是参数列表相同的方法。其实Java是允许数据的自动转型(或上转型),所以传入参数可以是要求参数的子类(对于基本数据类型来说传入参数不大于要求参数范围)
如下:
输出:show1
Java通过参数列表匹配程度调用重载方法,调用匹配度最高的,如下:
如果Java通过传入参数寻找到的匹配程度最高的方法是复数个,则会出现报错,如下:
错误为:
注意,不是因为第四个show方法的重载导致的错误,而是由于传入参数导致如果程序运行,则调用方法含糊不清(当然为避免这种错误Java在编译时即报错)
PS.我是初学者,谢谢大家指教,欢迎一起讨论 O(∩_∩)O~~