对于下面的代码,我确实理解为调用方法知道调用哪个重载方法是不明确的,但是我无法理解在这里检查参数匹配的确切方式。
public class Test{
public void m1(float i,int j){
System.out.println("float method ");
}
public void m1(int i, float j){
System.out.println("int method ");
}
public static void main(String[] args) {
Test a=new Test();
a.m1(10,10); // The method m1(float, int) is ambiguous for the type Test
}
}
答案 0 :(得分:4)
使用应该使其中一个参数显式浮动,即使用a.m1(10f, 10);
或a.m1(10, 10f);
否则编译器无法实现调用哪个方法
答案 1 :(得分:2)
如果多个成员方法都可访问并适用于方法调用,则Java编程语言将使用选择最具体方法的规则。所以这里的java编译器并不认为它们中的任何一个更具体,因此错误。
有关详细说明,请阅读JLS。