Eri*_*yen 12 java null constructor
可能重复:
传递null时选择了哪个构造函数?
我最近在几天前的编码时遇到了这种好奇心,似乎无法弄清楚为什么会发生以下情况:
鉴于下面的课程
public class RandomObject{
public RandomObject(Object o){
System.out.println(1);
}
public RandomObject(String[] s){
System.out.println(2);
}
}
Run Code Online (Sandbox Code Playgroud)
进行调用时new RandomObject(null);,输出始终2与构造函数的创建顺序无关.为什么要null引用字符串数组而不是对象?
And*_*nov 14
这里的关键是Object是String []的超类型
Java使用最具体的可用方法来解决此类情况.Null可以传递给两个方法而不会出现编译错误,因此Java必须在此处找到最具体的方法.String []的版本更具体 - 因此将选择执行它.
如果有两种情况可供选择,编译器将首先尝试选择更具体的情况.在这种情况下,String将被选中Object.
在另一个问题中,它String str不是String[] s
因此,由于它String[]是一种比其超类型更具体的数据类型Object,因此它被选中.
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |