Java 重载构造器的选择
在Java类中可以重载多个构造器,只要他们有不同的参数声明。
然而在使用中却会碰到这种令人混淆的情况:
?
class A{
???
??? public A(Object o){
?????? //...
??? }
?
??? public A(String[] strings){
?????? //...
??? }
????
??? //...
}
?
构造器调用的地方:
A a = new A( null );
?
这时虚拟机会使用的哪一个构造器来构造A对象呢?
答案:A
?
原因是Java重载的解析过程分为两个阶段:
?? 1,选取所有可以应用的方法或者构造器
?? 2,从1的列表中选择最精确的一个
?
Object是所有类型中最不精确的一个,所以null被看成String[]类型。
?