【发布时间】:2018-10-01 06:42:07
【问题描述】:
我目前正在复习 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
【问题讨论】:
-
你认为它应该调用哪个方法?为什么?
-
我认为它应该调用 test(int,float) 尽管 test(float,int) 会起作用。编译器应该优先考虑第一个有效参数,即 int。然后将第二个参数按照规则#2 转换为浮点数
-
编译器应该优先考虑第一个有效参数 - 这是在哪里声明的?
-
@Javajansen“编译器应该”谁说应该?
-
这只是我的想法。如果我是编译器,这就是我的大脑的工作方式。
标签: java overloading