方法重载不明确

我目前正在复习 OCA 考试,并认为 int/float 方法适用于第三次考试。

在 Jeane Boyarsky 的 OCA Study Guide 中只说了 4 条顺序规则来选择正确的重载方法。

  1. 按类型精确匹配

  2. 较大的原始类型

  3. 自动装箱类型

  4. 可变参数

有人可以解释为什么java说它不明确吗?

public static void main(String... args){

    OverLoadingMethod ov=new OverLoadingMethod();

    ov.test(1F,2);

    ov.test(1,2F);

    ov.test(1,2);

}

public void test(float i,int j){

    System.out.println("float/int");        

}


public void test(int i,float j){

    System.out.println("int/float"); 

}

public void test(float i,float j){

    System.out.println("float/float");

}

产生这个错误


OverLoadingMethod.java:12: error: reference to test is ambiguous

        ov.test(1,2);

          ^

  both method test(float,int) in OverLoadingMethod and method test(int,float) in OverLoadingMethod match



摇曳的蔷薇
浏览 186回答 3
3回答

繁花不似锦

没有一个重载需要两个整数。因此,必须将其中一个整数扩展为浮点数。但哪一个?浮点数是第一个参数时存在重载,而浮点数是第二个参数时存在另一个重载。应该选哪个?客观上哪个更好?根据语言规范的规则,两者都不是。因此暧昧。

慕虎7371278

对于ov.test(1,2),test(int i,float j)和test(float i,int j)都是可访问和适用的。然后编译器需要选择最具体的一个,而其中任何一个都不够具体,因此会发生编译器错误。

犯罪嫌疑人X

由于没有精度损失,Java 会自动将 int 转换为 float。因此,您test(1,2)可以解释为两个浮点参数,一个浮点数 - 一个整数,一个 int - 一个浮点数。因此对于编译器来说是不明确的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java