12

以下の例では、パラメータの順序のみが変更されていることに注意してください。だから私の質問は - メソッドのオーバーロードの例を以下で呼び出すことができますか?

public void show(String s, int a){
    System.out.println("Test.show(String, int)");
}
public void show(int s, String a){
    System.out.println("Test.show(int, String)");
}
4

1 に答える 1

12

はい、それは絶対にメソッドのオーバーロードです。

JLS のセクション 8.4.9から:

クラスの 2 つのメソッド (両方が同じクラスで宣言されているか、両方がクラスによって継承されているか、または 1 つが宣言され 1 つが継承されているかにかかわらず) が同じ名前を持ちますが、シグネチャがオーバーライド等価でない場合、メソッド名は次のようになります。過負荷。

「同等のオーバーライド」については、セクション 8.4.2で説明されています。

名前と引数の型が同じである場合、2 つのメソッドは同じシグネチャを持ちます。

[ ... 「同じ引数の型の詳細 ... 」

次のいずれかの場合、メソッド m1 の署名は、メソッド m2 の署名のサブ署名です。

  • m2 が m1 と同じ署名を持っている、または

  • m1 の署名は、m2 の署名の消去 (§4.6) と同じです。

2 つのメソッド シグネチャ m1 と m2 は、m1 が m2 のサブシグネチャであるか、m2 が m1 のサブシグネチャである場合、オーバーライド等価です。

于 2013-09-03T17:40:31.293 に答える