我知道原始数据类型的情况下的自动类型提升概念.但是在参考数据类型的情况下,我有下面的代码,它完美地工作.
public class Test4 {
void set(Object o) {
System.out.println("Inside Object");
}
void set(double[] a) {
System.out.println("Array");
}
public static void main(String[] args) {
new Test4().set(null);
}
}
Run Code Online (Sandbox Code Playgroud)
它给出了输出数组.
但是如果代替Object o,如果我们有任何其他类,那么这将显示编译时错误该方法对于类型Test4是不明确的
下面的代码给出了编译时错误
public class Test4 {
/*void set(Object o) {
System.out.println("Inside Object");
}*/
void set(String s) {
System.out.println("String");
}
void set(double[] a) {
System.out.println("Array");
}
public static void main(String[] args) {
new Test4().set(null);
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,每个参考数据类型(类,接口和数组)的默认值为null.
那么为什么上面的代码适用于Object o.
提前致谢
编译器总是选择具有更具体参数类型的方法,该方法可以匹配传递的参数,以防该参数可用于两个参数.
因为,null是有效值String,Object,double[],所以编译器必须决定调用哪个方法.
Object和double[],由于double[]是比更具体的Object(阵列只不过是Object).所以编译器会在这里选择更具体的类型 - double[].String和double[],编译器不能决定哪一个是更具体的类型,因为没有数组和字符串类型(它们不属于同一继承层次)之间的任何关系.所以它使得呼叫变得含糊不清.| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |