首页 > 解决方案 > 方法调用时的类型转换

问题描述

public class Demo1{
    public static void main(String[] args){
                    show('A','A');
    }
    public static void show(char c, long a){
        System.out.println("long-char");
    }
    public static void show(char c, int a){
        System.out.println("char-int");
    }
}

输出 :char-int

但是,当我在第show()一种方法中更改参数的顺序(替换 public static void show(char c, long a){}public static void show(long a, char c) {})时,会出现编译错误。

标签: java

解决方案


编译器说这是一个模棱两可的方法调用,因为它是。

重载解决的一般方法是在给定实际参数的数量和类型的情况下找到最具体的适用方法。

在第一种情况下,这两个方法char的第一个参数是;所以只要选择 int 或 long 重载更具体,因为实际参数是 a char:它int是更具体的重载,因为int它比 更窄long

在第二种情况下,一个方法将 char 作为第一个参数;一种方法将 char 作为第二个参数。因此,假设实际参数都是chars,则必须转换(扩展)其中一个参数才能调用其中一个方法。

在这种情况下,语言规范没有定义一个比另一个更具体;它们都被认为同样适用,因此方法调用不明确,因此是编译时错误。


推荐阅读