0

たとえば、引数を持つTest2 つのメソッド (単にambiguousMethodと呼ぶ)をオーバーロードするクラスがあります。1 つのメソッドには short があり、もう 1 つのメソッドには int がありますが、型が異なります。この状況では、型がshortintであると考えてください。そして、このメソッドを 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

4 に答える 4

12

そのプログラムはコンパイルされないため、どちらも呼び出されません。引数のない 2 つの同じ名前のメソッドは、戻り値の型に関係なく同じメソッド シグネチャを持ちます。これは Java のコンパイラ エラーです。

注: 上記の回答は、同じ名前の 2 つのメソッドに引数がなく、戻り値の型が異なるという質問があったときに与えられました。それ以来、それは別のものに変わりました。

「更新された」質問の場合:

intリテラルを渡すと3intメソッドが呼び出されます。メソッドを呼び出すにはshort、 を にキャスト3しますshort

ambiguousMethod((short) 3);
于 2013-10-30T17:00:25.857 に答える
1

リテラル を渡す3と、int引数を持つメソッドが呼び出されます。これ3は、他の予想される型が指定されていない場合に暗黙的に として型指定されるためですint( の場合とは異なりますshort s = 3)。

于 2013-10-30T17:00:52.587 に答える
0

整数リテラルのデフォルトの型は int であるため、version を呼び出す必要があります。他のバージョンをリテラルで呼び出したい場合は、キャストします。

于 2013-10-30T17:04:03.520 に答える
0

int数値リテラル値はintJavaのデフォルトの型であるため、引数を持つメソッドが呼び出されます。

明示的にキャストすると、引数short付きのメソッドが呼び出されます。short

ambiguousMethod((short)3); //will call method with short args.
于 2013-10-30T17:06:11.760 に答える