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) {}
),出现编译错误。
答案 0 :(得分:2)
编译器说这是模棱两可的方法调用,因为它是。
解决重载的一般方法是在给定实际参数的数量和类型的情况下,找到最具体的适用方法。
在第一种情况下,这两种方法都将<span class="align-text-middle">
text
</span>
<span class="align-text-top">
text
</span>
<span class="align-text-bottom">
text
</span>
作为其第一个参数;因此只有在实际参数是char
的情况下才选择int或long重载是更具体的:更具体的是char
重载,因为int
比int
窄。
在第二种情况下,一个方法将char作为第一个参数;一种方法将char作为第二个参数。因此,假设实际参数都是long
,则必须转换(扩展)其中一个参数以调用这两个方法。
在这种情况下,语言规范没有定义一个比另一个更具体;它们都被认为是同等适用的,因此方法调用是模棱两可的,因此是编译时错误。