Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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 在下面的示例中,为什么构造函数调用不是不明确的?_Java_Constructor - Fatal编程技术网

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?
    }
}