构造函数重载对于模拟默认值非常有用,或者从已存在的实例构建对象(复制)
这是一个例子:
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);
}
}
这里,第一个构造函数非常简单.你指定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;
}
countis从任何构造函数递增.