问下这段代码最后会输出什么,为什么..

2017-03-04 11:24:46 +08:00
 a1310747
public class Test {
public void test(Object o) {
System.out.println("Object");
}
public void test(String s) {
System.out.println("String");
}
public static void main(String[] args) {
Test that = new Test();
that.test(null);
}
}
2906 次点击
所在节点    程序员
15 条回复
littleshy
2017-03-04 11:32:02 +08:00
string 吧,不同类型以具体的为准。
ml3661190
2017-03-04 11:35:03 +08:00
输出 String 具体为什么我也不清楚,坐等大神解答
Kylinsun
2017-03-04 11:35:46 +08:00
你传的是什么类型调用的就是什么样的方法。
chnyang
2017-03-04 11:46:01 +08:00
输出的不应该是 String 么 ..
System.out.println("String");
ml3661190
2017-03-04 11:47:20 +08:00
不同类型以具体的为准。理解这句话应该就没问题了,我刚刚测试了一下

当传入的参数,未能有具体类型重载方法时,选择入参的的超类,也就是 Object 入参的方法

当有 Object , String , boolean 三个重载的方法时,传入 null 值,编译器则会报出一个 ambiguous 的编译异常

因为 String 跟 boolean 的方法都属于具体的类型,编译器无法判断选择那一个

大概就是这么个意思吧
chnyang
2017-03-04 11:47:20 +08:00
@ml3661190 我是菜鸟..不知道这是不是坑,但是 test 方法唯一的一行代码只是输出一个固定的字符串而已.. 求轻喷
yidinghe
2017-03-04 11:48:47 +08:00
编译失败。
chnyang
2017-03-04 11:50:45 +08:00
@ml3661190 然后发现两个 test 方法....我错了
a1310747
2017-03-04 11:52:06 +08:00
@ml3661190 当有 Object , String , boolean 三个重载的方法时,传入 null 值,并不会报错 依然还是输出 String
Cloudee
2017-03-04 11:52:41 +08:00
compile error
feiyuanqiu
2017-03-04 12:12:37 +08:00
jls8 §15.12.2
---------------
There may be more than one such method, in which case the most specific one is chosen. The descriptor (signature plus return type) of the most specific method is the one used at run time to perform the method dispatch.

https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.2
depress
2017-03-04 12:30:21 +08:00
方法重载优先选子类
ovear
2017-03-04 12:51:21 +08:00
优先匹配子类呀。。
feeeeeef
2017-03-04 13:21:01 +08:00
编译不通过
ml3661190
2017-03-04 13:44:30 +08:00
@a1310747 这...不知道如何截图,但是我的机器上 Eclipse 确实会报错

具体信息如下

The method test(Object) is ambiguous for the type Test

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/344835

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX