将调用哪种方法?

时间:2013-10-30 16:58:45

标签: java

例如,我们有一个类Test,它使用参数重载2个方法(只是称之为 ambiguousMethod ):1方法有short,另一个有int,但是不同类型< / strong>即可。在这种情况下,请考虑该类型 int 。然后我从main那样调用这个方法:

double d = new Test.ambiguousMethod(3);

那么将调用哪种方法?使用INT还是SHORT返回类型?

由于

这是我的代码:

Method a = new Method();
double d= a.print(3);


class Method {

    public int print(int a)
    {
        return a;

    }

    public short print(short b){
        return b;
    }

}

4 个答案:

答案 0 :(得分:12)

两者都不会被调用,因为该程序无法编译。无论返回类型如何,两个带有参数的同名方法都具有相同的方法签名,这是Java中的编译器错误。

注意:当问题表明两个同名方法没有参数和不同的返回类型时,给出了上面的答案。它已经变成了不同的东西。

对于“更新”问题:

您传递了int文字3,因此将调用int方法。要调用short方法,请将3投射到short

ambiguousMethod((short) 3);

答案 1 :(得分:1)

如果您传入文字3,则会调用带有int参数的方法,因为当没有其他预期类型时,3会隐式输入为int表示(与short s = 3的情况不同)。

答案 2 :(得分:0)

整数文字的默认类型是int,因此应该调用该版本。如果你想用文字调用另一个版本,请将其强制转换。

答案 3 :(得分:0)

将调用带有int参数的方法,因为数字文字值在Java中具有默认类型int

如果您明确地它到short,那么它将使用short参数调用方法。

ambiguousMethod((short)3); //will call method with short args.