这个问题可能类似于Java过载混淆
我正在读一本书,并且有一个关于方法重载的主题,编译器可能无法解析被调用的方法.书上的例子使用两个参数重载方法(int, double)和(double, int).像overloadedTwoParam(4,5)一样调用此方法将导致编译器错误,因为int可以传递给double.我的问题是,为什么编译器能够解析如果我的参数只有一个,将调用哪个方法?
public class Test {
public static void main(String[] args) {
Test t = new Test();
t.overloadedSingleParam(1); //this is working
t.overloadedTwoParam(4, 5); //this is NOT working
}
void overloadedSingleParam(double a) {
// do something here..
}
void overloadedSingleParam(int a) {
// do something here..
}
void overloadedTwoParam(double a, int b) {
// do something here..
}
void overloadedTwoParam(int a, double b) {
// do something here..
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么编译器能够解析如果我的参数只有一个将调用哪个方法
当谈到单个参数时,编译器能够看到有一个方法需要int这样,所以不应该混淆应该调用哪个方法.即使您删除了采用单个方法的方法,int编译器仍然可以调用单个方法,double因为这里没有歧义.(int可以晋升为double)
当涉及交替int和double参数的其他方法时,编译器不想负责决定是将第一个参数提升为a double还是将第二个参数提升为a double.
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |