java - 使用 "null"引用调用重载函数

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

最佳答案

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

如果您有以下情况

public class A {
    ...
}

public class B extends A {
    ...
}

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

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

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

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

关于java - 使用 "null"引用调用重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22887775/

相关文章:

java - XMPP编程使用erlang还是java?

java - 如何在 JMeter 中分析和报告 HTTP 响应

java - 我可以在 Java 中重载变量吗?

java - 如何添加一项功能,使每次单击鼠标时圆的大小加倍?

java - Java 字符串 UTF8 和 String8 之间的区别?

python - 在 Python 中覆盖 threading.excepthook 的正确方法是什么?

Scala:数组和类型删除

ios - Swift - 找不到重载......&无法转换表达式的类型

java - JSTL <c :if> tag - Checking whether Java Bean method returns True

C++ const char* 重载困惑