面试题答案
一键面试参数匹配规则
- 精确匹配:优先寻找参数类型与实际参数完全匹配的方法。例如,定义方法
void method(int num)
,当调用method(5)
时,由于5
是int
类型,正好与方法参数类型精确匹配,所以会调用此方法。 - 自动类型转换匹配:如果没有精确匹配的方法,Java 会尝试进行自动类型转换以找到匹配的方法。例如,定义方法
void method(double num)
,当调用method(5)
时,5
是int
类型,int
可以自动转换为double
,所以会调用这个方法。自动类型转换遵循从低精度到高精度的规则,如byte
->short
->int
->long
->float
->double
。 - 可变参数匹配:如果以上两种都不匹配,且存在可变参数方法,会尝试匹配可变参数方法。例如,定义方法
void method(int... nums)
,当调用method(1, 2, 3)
时,会调用这个可变参数方法。注意,如果同时存在精确匹配和可变参数匹配,优先选择精确匹配。
示例代码
public class MethodOverloadingExample {
// 精确匹配方法
public void print(int num) {
System.out.println("Printing int: " + num);
}
// 自动类型转换匹配方法
public void print(double num) {
System.out.println("Printing double: " + num);
}
// 可变参数匹配方法
public void print(int... nums) {
System.out.println("Printing varargs: ");
for (int num : nums) {
System.out.print(num + " ");
}
System.out.println();
}
public static void main(String[] args) {
MethodOverloadingExample example = new MethodOverloadingExample();
example.print(5); // 调用精确匹配方法
example.print(5.5); // 调用自动类型转换匹配方法
example.print(1, 2, 3); // 调用可变参数匹配方法
}
}
在上述代码中,main
方法中的三次 print
方法调用分别展示了精确匹配、自动类型转换匹配和可变参数匹配这三种情况。