Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 传递null时,重载期间将调用哪个方法_Java_Overloading - Fatal编程技术网

Java 传递null时,重载期间将调用哪个方法

Java 传递null时,重载期间将调用哪个方法,java,overloading,Java,Overloading,在以下程序中: public class PolyEx1 { public static void main(String[] args) { A refA = new A(); refA.method1(null); } } class A { public void method1(Object o) { System.out.println("o"); } public void method1(Strin

在以下程序中:

public class PolyEx1 {
    public static void main(String[] args) {
    A refA = new A();
        refA.method1(null);
    }
}

class A {
    public void method1(Object o) {
        System.out.println("o");
    }

    public void method1(String str) {
        System.out.println("str");
    }
}

输出为“str”,有人能解释为什么打印str吗?我无法理解这一点。

将执行public void method1(String str),因为对象是String supperclass,因此将调用String方法。

Java尝试使用方法的最具体适用版本

String
扩展了
Object
,因此总是调用使用String作为参数的方法

如果您尝试添加一个接受
整数
输入的方法,它将作为不明确的方法抛出错误,因为
字符串
整数
这两个方法都比Object更具体,但没有一个比Rohit解释的另一个更具体

这是因为字符串类是从对象扩展而来的,因此更加复杂 特定于对象。所以,编译器决定调用该方法。 记住,编译器总是选择最具体的方法来调用

如果多个成员方法可访问且适用于 方法调用时,必须选择一个来提供 运行时方法分派的描述符。Java编程 语言使用的规则是选择最具体的方法

非正式的直觉是,一种方法比另一种方法更具体 如果可以传递第一个方法处理的任何调用,则另一个 在没有编译时类型错误的情况下打开另一个

但是,如果有两个参数为String和Integer的方法, 然后您将得到null的歧义错误,因为编译器无法决定 哪一种更具体,因为它们是非协变类型

如JLS第节所述


这不是多态性。它超载了。太好了,为什么?这个答案对任何人都没有帮助。@Tenner我更新了解释。对不起,没有仔细阅读这个问题。你能重新考虑一下我的答案吗