Java 用“调用重载函数”;空";参考

Java 用“调用重载函数”;空";参考,java,overloading,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(Stri

假设我有以下重载函数

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
在类层次结构中较低。

在这种情况下,类层次结构中较低的类将具有优先级。换句话说,更具体的类类型,在本例中是
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);

你的问题得到了更充分的回答

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

    funOne((Object) null);

java不是C++。你不应该真的尝试比较两者,尤其是在讨论函数重载时。@PaulMcKenzie同意,我猜如果我添加另一个funOne(整数)代码而不编译,它会使用类层次结构来确定优先级。我在问“这个行为在C++ C++中是一样的吗?”java的可能副本不是C++。你不应该真的尝试比较两者,尤其是在讨论函数重载时。@PaulMcKenzie同意,我猜如果我添加另一个funOne(整数)代码而不编译,它会使用类层次结构来确定优先级。“C++是这样的行为吗?”如果<代码> < <代码> >代码> b>代码>是表兄弟类型,如果它们都扩展<代码>对象< /代码>,如果<代码> < <代码> >代码> b>代码>是表兄弟类型,例如它们都扩展<代码>对象< /代码>,谢谢?我可以猜,但我一直在寻找,谢谢你的回答谢谢,我可以猜,但我一直在寻找,谢谢你的回答