我目前正在复习 OCA 考试,认为 int/float 方法适用于第三次测试。
Jeane Boyarsky 的 OCA 学习指南中只说了 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
最佳答案
没有一个重载需要两个整数。
因此,必须将其中一个整数扩展为 float 。但哪一个呢?当 float 是第一个参数时存在重载,当 float 是第二个参数时存在另一个重载。
应该选择哪个?哪个客观上更好?根据语言规范的规则,两者都不是。因此模棱两可。
关于java - 方法重载不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52585777/