在下面的代码片段中,有一个名为 的方法的三个版本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()
)调用了重载方法的最后一个版本。它提供了一个字符串数组 -String[]
它被类型的接收参数所接受Object[]
。
然而,这个函数调用show(list);
试图调用重载方法的第一个版本。它传递一个类型字符串列表——List<String>
它应该被接收参数类型为类型List<Object>
的中间版本接受。方法的中间版本完全未使用。如果第一个版本被删除,这是一个编译时错误。
为什么这个调用show(list);
不调用这个版本——private void show(List<Object> list){}
中间那个?