重载构造函数

与方法一样,构造函数也可以被重载,这样就可以用不同方法来构造对象了,如下面的程序所示:
public class test2
{
    // @param args
    public static void main(String args[])
    {
     MyClass my1 = new MyClass();
     MyClass my2 = new MyClass(1);
     MyClass my3 = new MyClass(3.14);
    }
}
class MyClass
{
    MyClass()
    {
        System.out.println("Inside MyClass()");
    }
    
    MyClass(int i)
    {
        System.out.println("Inside  MyClass(int)");
    }
    
    MyClass(double d)
    {
        System.out.println("Inside  MyClass(double)");
    }
}
输出:
Inside MyClass()
Inside MyClass(int)
Inside MyClass(double)
MyClass()有3个重载版本,每一个都会构造一个不同的对象.执行new时,他就根据指定的形参来调用合适的构造函数.通过重载类的构造函数,可以为类的用户提供灵活的构造对象的方法.
最常见的重载构造函数的原因就是允许一个对象初始化另一个对象.例如,下面是使用Summation类计算整数值总和的程序:
public class test2
{
    // @param args
    public static void main(String args[])
    {
     Summation s1 = new Summation(5);
     Summation s2 = new Summation(s1);
     
     System.out.println("s2.sum : "+s2.sum);
    }
}
class Summation
{
    int sum;
    
    Summation(int num)
    {
        sum = 0;
        for(int i=1;i<=num;i++) sum +=i;
    }
    
    Summation(Summation ob)
    {
        sum = ob.sum;
    }
}
输出:
s2.sum : 15
如本例所示,提供构造函数来使用一个对象初始化另一个对象的效率是非常高的.对于本例,当构造S2时,没有必要重新求和.当然,即使在效率不是问题的时候,提供一个生成对象副本的构造函数也是非常有用的.