Java 在下面的示例中,为什么构造函数调用不是不明确的?
如果我添加了另一个构造函数,其参数类型为Java 在下面的示例中,为什么构造函数调用不是不明确的?,java,constructor,Java,Constructor,如果我添加了另一个构造函数,其参数类型为Integer,或者,对于任何其他类型,调用newtest(null)导致编译错误-构造函数测试(对象)不明确为什么上面的示例没有生成错误?在执行它时,将调用参数为String的构造函数。为什么不调用参数类型为Object的构造函数?如何解决这种模糊性 因为它是由最具体的参数类型决定的 因为String是Object的子类,null是任何东西的子类型,所以调用第二个构造函数,因为String比Object更具体 //打印字符串。为什么不反对呢 因为编译器选
Integer
,或者,对于任何其他类型,调用newtest(null)代码>导致编译错误-构造函数测试(对象)不明确
为什么上面的示例没有生成错误?在执行它时,将调用参数为String
的构造函数。为什么不调用参数类型为Object
的构造函数?如何解决这种模糊性 因为它是由最具体的参数类型决定的
因为String是Object的子类,null是任何东西的子类型,所以调用第二个构造函数,因为String比Object更具体
//打印字符串。为什么不反对呢
因为编译器选择最特定的类型
如果我为
任何其他类型,调用新测试(null);导致
编译错误-构造函数测试(对象)不明确
现在String
和Integer
在对象层次结构中处于同一级别,因此编译器不能从这两个方法中选择一个编译器的设计目的是选择与参数中发送的值非常匹配的重载方法
class Test {
public Test(Object obj) {
System.out.println("Object");
}
public Test(String s) {
System.out.println("String");
}
public static void main(String[] args) {
new Test(null); //prints String. Why not Object?
}
}