方法:
public void doSomething(mObject1 ob){
//Code A
}
public void doSomething(mObject2 ob){
//Code B
}
调用时执行的代码是什么?为什么?
doSomething(null);
答案 0 :(得分:4)
对于重载方法,调用具有最多特定参数类型的方法。否则,如果没有方法获胜,则认为它是不明确的并且是编译器错误。
如果您想传递null
,可以通过转换null
表达式或将其指定给变量来选择所需的方法。
doSomething((MObject1)null);
doSomething((MObject2)null);
MObject1 m1 = null;
doSomething(m1);
MObject1 m2 = null;
doSomething(m2);
在您的示例中,如果MObject1
是MObject2
的子类型,反之亦然,那么它应该编译。
(我正确地正确地将类型名称大写,因为这是正确的事情。)
答案 1 :(得分:4)
这取决于。如果mObject1
和mObject2
中的一个是另一个的子类型,则根据Java Language Specification 15.12.2.5选择最具体的方法。
如果它们不通过继承相关,则方法调用被认为是不明确的,并且会导致编译器错误。
答案 2 :(得分:2)
你不能用null参数调用doSomething。 编译器会抱怨。在所有其他情况下,方法的签名是匹配的。但是这将起作用:
doSomething((mObject1 )null);
答案 3 :(得分:1)
它会变成模糊的调用编译时错误
答案 4 :(得分:1)
这是编译器错误。 但是,如果一个方法参数是class而另一个是原始数据类型,那么结果将会改变。
〜Dheeraj