让我们说我有以下重载函数
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
参数签名调用方法?这里超载的优先级是什么?
答案 0 :(得分:3)
在这种情况下,类层次结构中较低的类将具有优先权。换句话说,更具体的类类型,在这种情况下为String
因为String
在技术上扩展Object
。
如果您有以下
public class A {
...
}
public class B extends A {
...
}
然后定义如下的重载方法:
public void test(A object) {
...
}
public void test(B object) {
...
}
然后调用test(null)
将调用第二种方法,因为B
在类层次结构中较低。
答案 1 :(得分:1)