假设我有以下重载函数
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参数签名的方法?这里重载的优先顺序是什么?
funOne(null)
String
在这种情况下,类层次结构中较低的类将具有优先权。换句话说,更具体的类类型,String在这种情况下将是因为String从Object技术上扩展了。
Object
如果您有以下内容
public class A { ... } public class B extends A { ... }
然后,当您定义如下的重载方法时:
public void test(A object) { ... } public void test(B object) { ... }
然后调用test(null)将调用第二个方法,因为B它在类层次结构中较低。
test(null)
B