重载的定义

类中的方法如果有相同的方法名、不同的方法签名,那么这几个方法是可以重载的。

什么是方法签名?

方法签名即为方法名+参数列表(参数类型)。
例如:
public void printValue(int value)的方法签名为printValue(int)

参数匹配原则

实例说明

先来看看下面这段代码,重载了方法名为printValue、入参分别为int和double的两个方法,并且调用时的实参传入的是float。


参数匹配原则

运行结果

Print Double Value : 2.0

可以看到传入是实参是float却调用了入参为double的方法。这其实就是Java重载时参数类型匹配的问题。

匹配规则解析

Java遇到这类问题时,总会选择一个赋值规则的精度最小的类型来使用。赋值规则即是即低精度的值可以赋值给高精度或同精度的变量,而高精度的不可以赋值给低精度。

Java基本类型中与精度有关的类型,精度从小到大排列依次是:byte、short、int、long、float、double。上述代码的实参传入的是float,按照赋值规则来看,可以选择float和double两种,上述代码中只重载double的方法,所以选择了double的那个。

当赋值规则匹配出多条重载方法时,会优先选择精度最小的那个。即同时匹配出float和double的话,就选择float。

总结

重载时(Overload)时的参数匹配规则如下:

  1. 符合基本类型的赋值规则,即低精度的值可以赋值给高精度或同精度的变量,而高精度的不可以赋值给低精度;
  2. 赋值规则匹配出多条时,选精度最小的。