使用" null"调用重载函数参考

时间:2014-04-05 22:40:05

标签: java overloading

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

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参数签名调用方法?这里超载的优先级是什么?

2 个答案:

答案 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)

您的问题得到了更充分的回答here并附有参考资料。

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

    funOne((Object) null);