S. *_*jee 6 java constructor overloading
我是Java的新手,并试图学习这个主题,以前只有HTML/CSS编程.我从Herbert Schildt开始,经历了几页.
我无法理解构造函数重载的确切优势.使用单一构造函数来重载方法是否更容易灵活?此外,如果我尝试使用构造函数重载来使用一个对象来初始化另一个对象,那么有更简单的方法可以做到这一点!那么有什么好处,我应该在哪种情况下使用构造函数重载.
构造函数重载对于模拟默认值非常有用,或者从已存在的实例构建对象(复制)
以下是一个示例:
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从任何构造函数递增.