重载的定义
类中的方法如果有相同的方法名、不同的方法签名,那么这几个方法是可以重载的。
什么是方法签名?
方法签名即为方法名+参数列表(参数类型)。
例如:
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)时的参数匹配规则如下:
- 符合基本类型的赋值规则,即低精度的值可以赋值给高精度或同精度的变量,而高精度的不可以赋值给低精度;
- 赋值规则匹配出多条时,选精度最小的。
网友评论