gpt4 book ai didi

java - 了解选择哪个构造函数以及为什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:34 24 4
gpt4 key购买 nike

为什么下面的程序每次都打印I'm string而不是 I'm object.I'm int.

public class Demo {

public Demo(String s){
System.out.println("I'm string");
}

public Demo(int i){
System.out.println("I'm int.");
}

public Demo(Object o){
System.out.println("I'm object.");
}

public static void main(String[] args) {
new Demo(null);
}
}

另外,如果我替换 intInteger .它给出错误 The constructor Demo(String) is ambiguous.为什么?

最佳答案

null 可以转换为ObjectString,但不能转换为int。因此第二个构造函数被淘汰了。

在转换为 Object 或转换为 String 之间,转换为 String 更为具体,因此选择了这一点。

JLS section 15.12.2描述了方法重载决议,我相信同样的方法也用于构造函数决议。 Section 15.12.2.5描述选择最具体的方法(在本例中为构造函数):

The informal intuition is that one method is more specific than another if any invocation handled by the first method could be passed on to the other one without a compile-time type error.

关于使用 Object 或 String 参数调用构造函数 - 任何由 new Demo(String) 处理的调用也可以传递给 new Demo(Object) 而无需编译时类型错误,但反过来是正确的,因此 new Demo(String) 一个更具体......因此由重载决议规则选择。

关于java - 了解选择哪个构造函数以及为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6383632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com