我的程序中遇到了一个问题,我用下面的一个小代码片段澄清了这一问题。谁能解释为什么会发生这种情况?
class ObjectnullTest {
public void printToOut(String string) {
System.out.println("I am null string");
}
public void printToOut(Object object)
System.out.println("I am null object");
}
class Test {
public static void main(String args[]) {
ObjectnullTest a = new ObjectnullTest();
a.printToOut(null);
}
}
这总是打印I am null string
.
我想知道原因,以便修改代码。
这是因为如果方法重载
最具体的方法是在编译时选择的。
由于 'java.lang.String' 是一个更具体类型比“java.lang.Object”。在您的情况下,选择以“String”作为参数的方法。
它清楚地记录在JLS http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf:
第二步搜索上一步确定的类型
成员方法。此步骤使用方法的名称和类型
用于定位可访问方法的参数表达式
并且适用,即可以正确调用的声明
关于给定的论点。
这样的方法可能不止一种,
在哪种情况下选择最具体的一种。描述符(签名
加上返回类型)最具体的方法是在运行时使用的方法
执行方法调度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)