次のコード スニペットには、 という名前のメソッドの 3 つのバージョンがありますshow()
。
package overloading;
import java.util.ArrayList;
import java.util.List;
public final class Main
{
private void show(Object object)
{
System.out.println("Object");
}
private void show(List<Object> list) //Unused method
{
System.out.println("List");
}
private void show(Object[] objects)
{
System.out.println("Objects");
}
private void addToList()
{
List<String>list=new ArrayList<String>();
list.add("String1");
list.add("String2");
list.add("String3");
show(list); // Invokes the first version
String []s={"111", "222", "333"};
show(s); // Invokes the last version
}
public static void main(String[] args)
{
new Main().addToList();
}
}
この最も単純な Java コードでは、このメソッド呼び出しshow(s);
(メソッドの最後の行) がオーバーロードされたメソッドの最後のバージョンaddToList()
を呼び出します。これは文字列の配列を提供し、type の受信パラメーターによって受け入れられます。String[]
Object[]
ただし、この関数呼び出しは、オーバーロードされたメソッドの最初のバージョンshow(list);
を呼び出そうとします。型文字列のリストを渡します。これは、受信パラメーターが型の中間バージョンによって受け入れられる必要があります。メソッドの中間バージョンは完全に使用されていません。最初のバージョンが削除されると、コンパイル時エラーになります。List<String>
List<Object>
この呼び出しがこのバージョン (中間バージョン) を呼び出さshow(list);
ないのはなぜですか?private void show(List<Object> list){}