我目前正在复习 OCA 考试,并认为 int/float 方法适用于第三次考试。在 Jeane Boyarsky 的 OCA Study Guide 中只说了 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
3 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
没有一个重载需要两个整数。
因此,必须将其中一个整数扩展为浮点数。但哪一个?浮点数是第一个参数时存在重载,而浮点数是第二个参数时存在另一个重载。
应该选哪个?客观上哪个更好?根据语言规范的规则,两者都不是。因此暧昧。
慕虎7371278
TA贡献1802条经验 获得超4个赞
对于ov.test(1,2)
,test(int i,float j)
和test(float i,int j)
都是可访问和适用的。然后编译器需要选择最具体的一个,而其中任何一个都不够具体,因此会发生编译器错误。
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
由于没有精度损失,Java 会自动将 int 转换为 float。
因此,您test(1,2)
可以解释为两个浮点参数,一个浮点数 - 一个整数,一个 int - 一个浮点数。因此对于编译器来说是不明确的。
添加回答
举报
0/150
提交
取消