方法重载编译错误,方法调用模糊

时间:2016-06-09 14:26:07

标签: java overloading

对于下面的代码,我确实理解为调用方法知道调用哪个重载方法是不明确的,但是我无法理解在这里检查参数匹配的确切方式。

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
    }
}

2 个答案:

答案 0 :(得分:4)

使用应该使其中一个参数显式浮动,即使用a.m1(10f, 10);a.m1(10, 10f);否则编译器无法实现调用哪个方法

答案 1 :(得分:2)

如果多个成员方法都可访问并适用于方法调用,则Java编程语言将使用选择最具体方法的规则。所以这里的java编译器并不认为它们中的任何一个更具体,因此错误。

有关详细说明,请阅读JLS