我很惊讶为什么输出与我期望的非常不同,我有两个重载方法,一个有一个String而另一个是Object作为参数,同时用null参数调用这个方法,输出只是打印
"String"
而不是调用具有对象作为参数的方法。
为什么Java选择具有String作为参数的方法,java如何确定要调用哪个重载方法?
class TestingClass {
public void test(String s) {
System.out.println("String");
}
public void test(Object o) {
System.out.println("Object");
}
public static void main(String[] args) {
TestingClass q = new TestingClass();
q.test(null);
}
}
答案 0 :(得分:2)
此代码中没有覆盖,只有方法重载。当编译器必须选择执行两个test
方法中的哪一个时(因为null
可以传递给两者),它会选择具有更具体参数类型的方法 - test(String s)
- { {1}}比String
更具体,因为它是Object
的子类。
可以使用以下方法调用另一种方法:
Object
答案 1 :(得分:0)
如果不添加可能的新答案,请允许我建议您扩展代码,如下所示
public class Overload {
public static void main(String[] args) {
new Overload().test(null);
}
public void test(String s) {
System.out.println("String");
}
public void test(Object o) {
System.out.println("Object");
}
public void test(Integer s) {
System.out.println("Integer");
}
}
注释掉任何一个Object或Integer版本,任何人都可以自己查看。答案已由其他人提供。