笔试一道重载题疑问

yooyoozoo 2009-11-22 05:52:01
一个方法test重载,
一个是test(String),一个是test(Object),
调用的时候 用test(null)为什么调用的是string的那个方法;

另再加一个test(StringBuffer),
这时候调用test(null),为什么又编译错误!

对解答者表示感谢!
...全文
388 35 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
你让编译器二选一,它不不怎么会啊!
  • 打赏
  • 举报
回复
糊涂中。。。。。。。。
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)
内容概要:本文档是一份针对初学者的Spring框架整合学习笔记,系统介绍了Spring Framework的核心基础与Spring MVC的开发应用。内容涵盖IOC(控制反转)的基本概念、配置方式与注解使用,详细讲解了bean的生命周期、作用域、依赖注入方式及自动装配机制;深入阐述AOP(面向切面编程)的XML与注解实现,包括切点、通知、织入等核心概念;全面演示Spring MVC的环境搭建、请求处理、参数绑定、视图解析、文件上传、RESTful风格支持、JSON返回、异常处理与拦截器开发;同时包含表单验证、国际化、与Struts2对比以及Spring IOC与MVC整合等实用知识点。; 适合人群:具备Java基础和基本Web开发经验,正在学习或刚进入企业级Java开发领域的初级程序员、应届毕业生及转行人员。; 使用场景及目标:①掌握Spring核心机制如IOC、AOP的原理与实际配置;②能够独立搭建Spring MVC项目并实现常见Web功能如参数接收、响应处理、文件上传、异常统一管理等;③理解Spring生态中各注解的作用与最佳实践,为后续学习Spring Boot和微服务打下坚实基础。; 阅读建议:此资源以理论结合实操为主,建议边阅读边动手搭建项目,重点理解配置背后的运行机制,尤其是bean生命周期、AOP织入过程和MVC请求流程,配合调试加深理解。
内容概要:本文围绕2026年高教社杯全国大学生数学建模竞赛A“药材的烘干问”提供完整的数学建模解决方案,涵盖问分析、模型构建、算法实现与论文撰写等全套资源。文档不仅深入解析药材烘干过程中的传热传质机理,建立优化模型以提升干燥效率与品质,还系统整合了Matlab、Python等多种编程语言的代码实现方案,并附有高质量论文模板与写作指导。此外,资源包扩展覆盖无线电干扰源定位、微网电力调控、时频冲突消解、SEM广告投放策略等多个赛,以及信号处理、电力系统优化、车间调度、路径规划、图像处理等多领域科研技术支持,配套提供大量仿真代码、算法模型与网盘资源链接,形成面向数学建模竞赛与科研实践的一站式学习与应用平台。; 适合人群:全国大学生数学建模竞赛参赛者,具备一定数学建模、编程基础的本科及研究生层次学生,以及从事智能优化、信号处理、电力系统、路径规划等相关领域的科研人员与工程技术人员。; 使用场景及目标:①辅助完成数学建模竞赛目,特别是药材烘干过程的建模与优化求解;②学习多领域典型问的建模方法与算法实现技巧,如优化算法、机器学习、控制仿真等;③获取标准化论文写作框架与优秀范例,提升科研表达能力与竞赛成绩。; 阅读建议:建议结合文档中提供的代码与论文范例进行实操复现,重点掌握建模逻辑、算法选型与结果分析方法;充分利用网盘资源拓展学习广度,针对自身研究方向深入钻研相关技术细节,全面提升综合实践与创新能力。
内容概要:本文系统阐述了基于矩方法的工程不确定度快速评估策略,重点突出其在迭代设计优化中的计算效率与稳定性优势,并配套提供了完整的Matlab代码实现。该方法通过提取输入变量的高阶矩信息,结合最大熵原理进行概率分布重建,从而实现对输出响应不确定性的高效传播分析,有效克服了传统蒙特卡洛方法计算成本高昂的弊端。研究深入对比了最大熵方法与Pearson分布系统在处理单峰及多峰分布尾部估计时的性能差异,验证了前者在扩展不确定度评估中的更高精度与更强鲁棒性,尤其适用于航空航天、高端装备等对可靠性要求严苛的复杂工程系统。; 适合人群:具备概率统计、随机过程及数值计算基础,从事工程设计、可靠性分析、不确定性量化或优化研究的科研人员、工程师及高年级研究生。; 使用场景及目标:①解决复杂工程系统中因材料、制造、载荷等多源不确定性引发的性能波动评估难;②在迭代式设计优化流程中嵌入高效的不确定度传播模块,提升优化过程的稳定性与收敛性;③替代计算耗时的抽样方法(如蒙特卡洛),实现快速风险评估与可靠性分析;④应用于高维、非线性系统的尾部风险预测与安全边界划定。; 阅读建议:建议读者结合提供的Matlab代码,重点研读高阶矩计算、矩约束构建、熵最大化优化求解及概率密度函数重建等关键模块的实现细节,通过复现文中的对比实验,深入理解不同方法在尾部估计上的差异,并尝试将其应用于自身的工程案例中以掌握其适用边界与调参技巧。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧