你看错误提示
The method add(int, float) is ambiguous for the type
ambiguous 是有歧义的意思
————————————————————————————————————————————————————————
class Test{
public static void main(String[] args) {
/** 可以通过编译 - 调用的是方法一 */
add((short) 3, 5.0f);
/** 优先调用方法四 */
add((short) 3, 4);
}
/**
* 方法一
*
* @param int a
* @param float b
* @return int
*/
public static float add(int a, float b) {
System.out.println(" method 1 invoke ..");
return (int) (a + b);
}
/**
* 方法二
*
* @param float a
* @param int b
* @return int
*/
public static int add(float a, int b) {
System.out.println(" method 2 invoke ..");
return (int) (a + b);
}
/**
* 方法三
*
* @param float
* @param float b
* @return float
*/
public static int add(float a, float b) {
System.out.println(" method 3 invoke ..");
return (int) (a + b);
}
/**
* 方法四
*
* @param int
* @param int b
* @return int
*/
public static int add(int a, int b) {
System.out.println(" method 4 invoke ..");
return (int) (a + b);
}
}
你试着注释一下每一个方法。就可以看出来了 。Test3.add((short)3, 4)优先匹配第四种方法。如果没有第四种方法,它会匹配比它级别高的方法,如第一个或其他。Test3.add((short)3, 5.0f)属于add(int ,float),但第一种和第二种方法均适用,系统不明确对add的引用,所以无法通过编译。总之是一个优先级别的概念。
|