我很惊讶为什么输出与我期望的有很大不同,我有两个重载方法,一个有一个字符串,另一个有一个对象作为参数,当使用空参数调用此方法时,输出只是打印
"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);
}
}
最佳答案
此代码中没有重写,只有方法重载。当编译器必须选择执行两个 test
方法中的哪一个时(因为 null
可以传递给这两个方法),它会选择具有更具体参数类型的方法 - test(String s)
- String
比 Object
更具体,因为它是 Object
的子类。
可以使用以下方式调用另一个方法:
q.test((Object) null);
关于java - 使用 null 参数进行意外重载方法编译器选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36735188/