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>代码>是表兄弟类型,例如它们都扩展<代码>对象< /代码>,谢谢?我可以猜,但我一直在寻找,谢谢你的回答谢谢,我可以猜,但我一直在寻找,谢谢你的回答