给定代码:
public static void main(String[] args)
{
doSomething(new ArrayList());
}
public static void doSomething(Collection collection) {
System.out.println("Collection here!");
}
public static void doSomething(List list) {
System.out.println("List here!");
}
这会按预期打印出List here!
,但这种行为是在Java规范的某处定义的,所以我可以依赖它,给定任何Java实现?
答案 0 :(得分:3)
在编译时,大多数特定方法选择调用。
在你的情况下
ArrayList > List > Collection
由于ArrayList
是List
中最具体的子类型,因此列表是Collection
中最具体的子类型。
以下是方法调用规则的说明
https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.2
答案 1 :(得分:0)
还有更有趣的行为:
public static void main(String[] args)
{
Collection myCollection = new ArrayList();
doSomething(myCollection);
}
public static void doSomething(Collection collection) {
System.out.println("Collection here!");
}
public static void doSomething(List list) {
System.out.println("List here!");
}
这将在此打印收藏!