我写了这个测试代码
public class ConstructorTestApplication {
private static String result;
public static void main(String[] args) {
ConstructorTest test1 = new ConstructorTest(0);
System.out.println(result);
}
private static class ConstructorTest {
public ConstructorTest(double param){
result = "double constructor called!";
}
public ConstructorTest(float param) {
result = "float constructor called!";
}
}
}
结果是
float constructor called!
为什么调用float构造函数而不是double构造函数?这是动态方法查找的一部分吗?
最佳答案
ConstructorTest(float param)
是这两个构造函数中最具体的方法,因为带有double
参数的方法可以接受任何float
值,但事实并非如此。
JLS 15.12.2.5: