MST

星途 面试题库

面试题:Java多态中方法重载的参数匹配规则

在Java多态的方法重载中,当存在多个重载方法时,描述一下Java编译器是如何确定调用哪个方法的参数匹配规则?请举例说明。
24.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

参数匹配规则

  1. 精确匹配:优先寻找参数类型与实际参数完全匹配的方法。例如,定义方法 void method(int num),当调用 method(5) 时,由于 5int 类型,正好与方法参数类型精确匹配,所以会调用此方法。
  2. 自动类型转换匹配:如果没有精确匹配的方法,Java 会尝试进行自动类型转换以找到匹配的方法。例如,定义方法 void method(double num),当调用 method(5) 时,5int 类型,int 可以自动转换为 double,所以会调用这个方法。自动类型转换遵循从低精度到高精度的规则,如 byte -> short -> int -> long -> float -> double
  3. 可变参数匹配:如果以上两种都不匹配,且存在可变参数方法,会尝试匹配可变参数方法。例如,定义方法 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 方法调用分别展示了精确匹配、自动类型转换匹配和可变参数匹配这三种情况。