天涯小站 2.0

 找回密码
 注册
搜索
查看: 10195|回复: 5

[IT] 向Java人请教一个问题。

[复制链接]
发表于 2009-7-29 13:40:53 | 显示全部楼层 |阅读模式
package test;
public class SuperSubTest {
    public void foo(Sub sub){
        System.out.println("Sub");
    }

    public void foo(Super sup){
        System.out.println("Super");
    }

    public static void main(String[] args){
        new SuperSubTest().foo(null);
    }
}

Sub是Super的子类:

public class Super {  }

public class Sub extends Super{  }


问题:结果应该是什么?为什么?
回复

使用道具 举报

发表于 2009-8-6 12:56:06 | 显示全部楼层
你的class里,有两个methods都叫同一个名字,foo, compiler不会让你通过吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-6 14:06:26 | 显示全部楼层
它们是不同type,signature不一样,结果是打印出"Sub",大概按照“最短路径原理”,Sub match 比较快。
回复 支持 反对

使用道具 举报

发表于 2009-8-6 20:19:51 | 显示全部楼层
new SuperSubTest().foo(null);

应该通不过。必须用强制类型转换(null)。ambiguous,不知调用那个method。
回复 支持 反对

使用道具 举报

发表于 2009-8-6 21:22:33 | 显示全部楼层
The output is "Sub". The most specific type gets picked.  
get(List l){"List"}
get(ArrayList l){"ArrayList"}

get(null) matches ArrayList since it is more specific.
回复 支持 反对

使用道具 举报

发表于 2009-8-6 21:38:21 | 显示全部楼层
像是天书。看不懂。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|天涯小站

GMT-5, 2026-6-29 10:01 PM

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表