使用“null”引用调用重载函数

让我们说我有以下重载函数

public class Test { public static void funOne(String s){ System.out.print("String function"); } public static void funOne(Object o){ System.out.print("Object function"); } public static void main(String[] args) { funOne(null); } } 

为什么funOne(null)使用String参数签名调用该方法? 这里重载的优先级是什么?

在这种情况下,类层次结构中较低的类将具有优先权。 换句话说,更具体的类类型,在这种情况下将是String ,因为String在技​​术上扩展了Object

如果您有以下内容

 public class A { ... } public class B extends A { ... } 

然后,当您定义重载方法时,如下所示:

 public void test(A object) { ... } public void test(B object) { ... } 

然后调用test(null)将调用第二个方法,因为B在类层次结构中较低。

您的问题在这里有更全面的答案参考。

此外,您可以通过执行以下操作强制调用特定方法:

  funOne((Object) null);