构造函数重载的优点

S. *_*jee 6 java constructor overloading

我是Java的新手,并试图学习这个主题,以前只有HTML/CSS编程.我从Herbert Schildt开始,经历了几页.

我无法理解构造函数重载的确切优势.使用单一构造函数来重载方法是否更容易灵活?此外,如果我尝试使用构造函数重载来使用一个对象来初始化另一个对象,那么有更简单的方法可以做到这一点!那么有什么好处,我应该在哪种情况下使用构造函数重载.

joh*_*n d 5

构造函数重载对于模拟默认值非常有用,或者从已存在的实例构建对象(复制)
以下是一个示例:

public class Color {

    public int  R, G, B, A;

    // base ctr
    public Color(int R, int G, int B, int A) {
        this.R = R;
        this.G = G;
        this.B = B;
        this.A = A;
    }

    // base, default alpha=255 (opaque) 
    public Color(int R, int G, int B) {
        this(R, G, B, 255);
    }

    // ctr from double values
    public Color(double R, double G, double B, double A) {
        this((int) (R * 255), (int) (G * 255), (int) (B * 255), (int) (A * 255));
    }

    // copy ctr
    public Color(Color c) {
        this(c.R, c.G, c.B, c.A);
    }

}
Run Code Online (Sandbox Code Playgroud)

这里,第一个构造函数非常简单.您可以为颜色指定R,G,B和Alpha值.

虽然这足以使用Color类,但您提供了第二个构造函数升,如果用户未指定,则会自动将255分配给alpha.

第三个ctr显示您可以使用0和1之间的双重实例化Color对象,而不是整数.

最后一个将Color作为唯一参数,它复制给定的对象.

其优点还在于始终调用第一个构造函数,您可以使用它来手动计算实例.假设你有一个private static int count=0属性,你可以像这样跟踪Color实例的数量:

    // base ctr
    public Color(int R, int G, int B, int A) {
        this.R = R;
        this.G = G;
        this.B = B;
        this.A = A;
        ++count;
    }
Run Code Online (Sandbox Code Playgroud)

count从任何构造函数递增.