2013-09-03 7 views
7

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

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)"); 
} 
+0

シグネチャの変更は、もちろん過負荷です。 – Juvanis

+2

はい、オーバーロードされています。あなたはちょうど自分でそれをチェックしたかもしれません。誤って多重定義されたメソッドの場合、コンパイラはエラーを出します。 –

+4

できますか?はい。すべき?おそらくそうではありません。 –

答えて

8

はい、これは絶対的な方法のオーバーロードです。 section 8.4.9 of the JLSから

クラスの2つの方法は、(両方とも同じクラス内で宣言され、またはその両方のクラスから継承されている、または1つの宣言と1つの継承するかどうか)は、同じ名前で署名を持っている場合override-overrideでない場合、メソッド名はオーバーロードされていると言われます。

「オーバーライド相当の」section 8.4.2に記述されている:彼らは同じ名前と引数の型を持っている場合

の2つの方法が同じシグネチャを持っています。いずれかの場合

[「同じ引数型に...詳細...]

メソッドM1のシグネチャはメソッドM2の署名のサブシグニチャである:

  • M2が有しますM1、又は

  • 同じ署名はM1のシグネチャは、M2のシグネチャの消去(§4.6)と同じである。

2つのメソッドシグネチャm1とm2は、m1がm2のサブシグネチャかm2のいずれかがm1のサブシグネチャである場合、オーバーライドに相当します。

関連する問題