Comment on page

建構元間的呼叫 - 透過this

在建構元也可以運用 this 達到建構元間的呼叫。
以下範例為建構元利用this的技術來相互呼叫:
class CCircle
{
private String color;
private double pi=3.14;
private double radius;
public CCircle() //這是一個沒有引數建構元
{
this("Green",1.0); //這行將會呼叫有兩個引數的建構元
System.out.println("CCircle() 呼叫");
}
public CCircle(String str, double r) //這是一個有兩個引數的建構元
{
System.out.println("CCircle(String,double) 呼叫");
color=str;
radius=r;
}
public void show()
{
System.out.println("color="+color+", Radius="+radius);
System.out.println("area="+pi*radius*radius);
}
}
public class class_constructor_3
{
public static void main(String args[])
{
CCircle cir1=new CCircle();
cir1.show();
}
}
以下針對這程式解說一下:
主程式部分,直接呼叫沒有引數的建構元
CCircle cir1=new CCircle();
讓我們看到沒有引數的建構元
public CCircle() //這是一個沒有引數建構元
{
this("Green",1.0); //這行將會呼叫有兩個引數的建構元
System.out.println("CCircle() 呼叫");
}
讓我們再看到有兩個引數的建構元
public CCircle(String str, double r) //這是一個有兩個引數的建構元
{
System.out.println("CCircle(String,double) 呼叫");
color=str;
radius=r;
}
剛剛在沒有引數的建構元當中:
this("Green",1.0);
把color 設為Green,radius設為1.0; 因為要呼叫下方 擁有兩個引數的建構元, 因此以this() 來呼叫。

注意

this ( ) 要寫在建構元的敘述第一行;以下情況是不行的:
public CCircle() //這是一個沒有引數建構元
{
System.out.println("CCircle() 呼叫");
this("Green",1.0); //這行寫法是錯誤的
}
正確寫法為:
public CCircle() //這是一個沒有引數建構元
{
this("Green",1.0); //這行將會呼叫有兩個引數的建構元
System.out.println("CCircle() 呼叫");
}