您的位置:首页 > 编程语言 > Java开发

Java重载函数,当参数为null时,调用的处理

2016-11-10 10:05 197 查看

精确性原则

关于以下程序的输出结果:

public class TestNull {
public void show(String a){
System.out.println("String");
}
public void show(Object o){
System.out.println("Object");
}
public static void main(String args[]){
TestMain t = new TestMain();
t.show(null);
}
}
输出结果为:

string

解释:主要是重载函数或构造函数调用时精确性的问题。

java是强类型语言,就是使用的时候要明确类型,如果不明确的话,编译器会帮你做,它会调用他认为最合适的那个,编译器也是程序,也是按照预先的规则执行。

Java的重载解析过程是以两阶段运行的。第一阶段 选取所有可获得并且可应用的方法或构造器。第二阶段在第一阶段选取的方法或构造器中选取最精确的一个。如果一个方法或构造器可以接受传递给另一个方法或构 造器的任何参数,那么我们就说第一个方法比第二个方法缺乏精确性。

在我们的程序中,两个构造器都是可获得 并且可应用的。构造器Confusing(Object)可以接受任何传递给Confusing(double[ ])的参数,因此Confusing(Object)相对缺乏精确性。(每一个double数组都是一个Object,但是每一个Object并不一定是 一个double数组。)因此,最精确的构造器就是Confusing(double[ ]),这也就解释了为什么程序会产生这样的输出。

理解本谜题的关键在于在测试哪一个方法或构造器最精确。

要想用一个null参数来调用 Confusing(Object)构造器,你需要这样写代码:new Confusing((Object)null)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: