社区
Java SE
帖子详情
笔试一道重载题疑问
yooyoozoo
2009-11-22 05:52:01
一个方法test重载,
一个是test(String),一个是test(Object),
调用的时候 用test(null)为什么调用的是string的那个方法;
另再加一个test(StringBuffer),
这时候调用test(null),为什么又编译错误!
对解答者表示感谢!
...全文
301
35
打赏
收藏
笔试一道重载题疑问
一个方法test重载, 一个是test(String),一个是test(Object), 调用的时候 用test(null)为什么调用的是string的那个方法; 另再加一个test(StringBuffer), 这时候调用test(null),为什么又编译错误! 对解答者表示感谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
35 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
raul317
2009-11-24
打赏
举报
回复
学习了
圣诞老人123
2009-11-23
打赏
举报
回复
学习了。。。。
ChDw
2009-11-23
打赏
举报
回复
这里是编译器的优化,如果同时有两个方法入口符合,编译器会尽量找声明子类的那个方法
但是如果定义了test(StringBuffer),编译器就不知道应该使用哪个子类才合适了
code potato
2009-11-23
打赏
举报
回复
[Quote=引用楼主 yooyoozoo 的回复:]
一个方法test重载,
一个是test(String),一个是test(Object),
调用的时候 用test(null)为什么调用的是string的那个方法;
另再加一个test(StringBuffer),
这时候调用test(null),为什么又编译错误!
对解答者表示感谢!
[/Quote]
编译器总是根据调用方法时传入的参数类型来决定调用哪一个重载方法,如果参数为null则会首先试图找到Object类层次结构中唯一的类与之匹配,如果没有可以匹配的才会匹配Object类。
如果有两个以上的重载方法参数可以匹配null,并且参数类型在Object类层次结构中有父子关系或子孙关系,则匹配最底层的子类,如果不是以上关系编译器则会认为是二义性。String和StringBuffer就是兄弟关系,所以有二义性。
苍蝇①号
2009-11-23
打赏
举报
回复
学习
gqchen1981
2009-11-23
打赏
举报
回复
学习了。
一洽客服系统
2009-11-23
打赏
举报
回复
[Quote=引用 13 楼 zl3450341 的回复:]
引用 11 楼 amdgaming 的回复:
引用 3 楼 p17939845 的回复:
引用 1 楼 amdgaming 的回复:
兄弟 sjcp题吧
编译器很聪明的,它会找 除了object那个意外的一个,如果有2个,就是二异性 它就会报错了
其实就是这样。。。
编译器很聪明?聪明个头阿,已经都二义性了,只不过打了一个补丁,对Object特殊处理了一下。这应该算java语言不严谨的一个地方。
你懂个 屁啊, 你在看看大家的回答。。。。
[/Quote]
^_^
liujun3512159
2009-11-23
打赏
举报
回复
呵呵,编译器不知道怎么选择了,因为几个方法都可以调用,编译器在想,我该调用谁哦?最后没办法,我还是报错得了
MINISUDA
2009-11-23
打赏
举报
回复
[Quote=引用 12 楼 amdgaming 的回复:]
引用 9 楼 yooyoozoo 的回复:
那null也符合object 为什么不调用参数为object的那个方法呢?
我提了2个问题 麻烦大家分别介绍下 谢谢!
如果 只有 一个 那个 object参数 肯定会调用 它
但是现在除了 object还有string,它会先调用 string的那个函数,重载就是为了解决 子类的多种多样
编译器会首先 选择 除了 object类 之外 先调用,。。。如果有 stringbuffer ,那么 string和stringbuffer
都满足, 编译 器 调用没有办法 去选择调用哪个?所有 报错了。。。。
[/Quote]
正解
李子做IT
2009-11-23
打赏
举报
回复
#12的意思是
编译器会自动判断非Object方法调用.
有2个非OBJECT方法,调用null,则报异常
lwtazt
2009-11-23
打赏
举报
回复
你让编译器二选一,它不不怎么会啊!
叶涛网站推广优化
2009-11-23
打赏
举报
回复
糊涂中。。。。。。。。
whut0802
2009-11-23
打赏
举报
回复
学习了呵呵
yooyoozoo
2009-11-23
打赏
举报
回复
早看到大家的解答我笔试这个题也不会做的稀烂了!
谢谢各位!
wxzyydy
2009-11-23
打赏
举报
回复
ding
hejunlong007
2009-11-23
打赏
举报
回复
正常现象
wifewifewife
2009-11-23
打赏
举报
回复
[Quote=引用 28 楼 ghchen 的回复:]
在这个程序中, test.print(null)中的null即是String又是Object,那么要执行那个函数呢?结果是它执行了 public void print(String some),原因就是准确性原则,String继承自Object.在java看来,在这个例子中说null是String类型的比说null是Object类型的更为准确.
String和StringBuffer之间不存在继承关系,因此不能说null属于它们两个中的那个类更准确,于是程序在执行时就会不知道该调用public void print(String some),还是该调用 public void print(StringBuffer some).
[/Quote]
同意这个观点.
bayougeng
2009-11-23
打赏
举报
回复
[Quote=引用 28 楼 ghchen 的回复:]
在这个程序中, test.print(null)中的null即是String又是Object,那么要执行那个函数呢?结果是它执行了 public void print(String some),原因就是准确性原则,String继承自Object.在java看来,在这个例子中说null是String类型的比说null是Object类型的更为准确.
String和StringBuffer之间不存在继承关系,因此不能说null属于它们两个中的那个类更准确,于是程序在执行时就会不知道该调用public void print(String some),还是该调用 public void print(StringBuffer some).
[/Quote]
貌似正解。
ghchen
2009-11-23
打赏
举报
回复
在这个程序中, test.print(null)中的null即是String又是Object,那么要执行那个函数呢?结果是它执行了 public void print(String some),原因就是准确性原则,String继承自Object.在java看来,在这个例子中说null是String类型的比说null是Object类型的更为准确.
String和StringBuffer之间不存在继承关系,因此不能说null属于它们两个中的那个类更准确,于是程序在执行时就会不知道该调用public void print(String some),还是该调用 public void print(StringBuffer some).
holsten32
2009-11-23
打赏
举报
回复
顶
加载更多回复(15)
Java面试
笔试
题
大汇总(最全+详细答案)
声明:有人说, 有些面试
题
很变态,个人认为其实是因为我们基础不扎实或者没有深入。本篇文章来自一位很资深的前辈对于最近java面试
题
目所做的总结归纳,有170道
题
目 ,知识面很广 ,而且这位前辈对于每个
题
都自己测试给出了答案 ,如果你对某个
题
有
疑问
或者不明白,可以电脑端登录把
题
目复制下来然后发表评论,大家一起探讨,也可以电脑端登录后关注我给我发私信,我们一起进步!以下内容来自这位前辈2013年年底的...
Java面试
笔试
题
大汇总(最全+详细答案) 2019
声明:有人说, 有些面试
题
很变态,个人认为其实是因为我们基础不扎实或者没有深入。本篇文章来自一位很资深的前辈对于最近java面试
题
目所做的总结归纳,有170道
题
目 ,知识面很广 ,而且这位前辈对于每个
题
都自己测试给出了答案 ,如果你对某个
题
有
疑问
或者不明白,可以电脑端登录把
题
目复制下来然后发表评论,大家一起探讨,也可以电脑端登录后关注我给我发私信,我们一起进步! 以下内容来自这位前辈 2013年年...
Java
笔试
题
含答案
《Java170道面试
笔试
题
全集》 注:为方便大家阅览,可以点击右边的目录按钮快速选择
题
目。 Java170道
笔试
题
含答案-涉及java/数据库/Spring框架/JVM/数据结构算法/设计模式相关 2019年4月20日更新
题
目 更新版-8.30 2018/4/7日常修复 2017/12/28更新文章 1、添加二级目录 2、对部分问
题
进行了补充 9/24紧急修改以下问
题
(...
(转)Java面试
笔试
题
大汇总(最全+详细答案)
声明:有人说, 有些面试
题
很变态,个人认为其实是因为我们基础不扎实或者没有深入。本篇文章来自一位很资深的前辈对于最近java面试
题
目所做的总结归纳,有170道
题
目 ,知识面很广 ,而且这位前辈对于每个
题
都自己测试给出了答案 ,如果你对某个
题
有
疑问
或者不明白,可以电脑端登录把
题
目复制下来然后发表评论,大...
《Java170道面试
笔试
题
全面含答案》
1、面向对象的特征有哪些方面?2、访问修饰符public,private,protected,以及不写(默认)时的区别?3、String 是最基本的数据类型吗?4、float f=3.4;是否正确?5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?6、Java有没有goto?7、int和Integer有什么区别?8、&和&a...
Java SE
62,615
社区成员
307,318
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章