上一篇用了車子來舉列一些物件導向的概念,這次我用"人"這個類別來介紹JAVA裡「建構式」(Constructor)的概念
Code 1:
public class Human {
String Name;
// Method 1
public void Human() {
System.out.println(Name);
}
// Method 2
public void Human(String name) {
Name = name;
System.out.println(Name);
}
// Method 3
public void Human(String name, int age) {
Name = name;
System.out.printf("%s %d\n",Name,age);
System.out.printf("%s %d\n",name,age);
}
}
上面是"Human"類別的程式碼, 裡面有一個叫Name的實體變數、三個叫Human的Method就是"建構式"
*「具有與類別相同名稱的Method就是"建構式"」(建構式不需要回傳值)
那三個建構式的Method裡面包含了印出名字的指令,看看主程式的程式碼
Code 2:
public class Main {
public static void main(String[] args) {
Human Peter = new Human(); // Method 1
Human Mary = new Human("Mary"); // Method 2
Human Sam = new Human("Sam", 16); // Method 3
}
}
主程式(Code 2)用了建構式的方法來產三個"Human"類別的物件,
第一行產生了一個名稱叫做Peter的物件,他的建構式並沒有傳進任何的參數
第二行產生了一個名字叫做Mary的物件,他的建構式傳進了他的名字作參數
第三行產生了一個名字叫做Sam的物件,他的建構式傳進了他的名字和年齡作參數
用建構式產生物件時會執行建構式裡的指令,這裡的程式碼是輸出的指令
輸出的結果是:
null
Mary
Sam 16
Sam 16
1. 第一行為Peter物件所輸出的結果。他是用沒有參數的Method 1建構式,執行Method 1建構式輸出實體變數Name的指令時,Name的值是null,所以輸出結果是null
2. 第二行為Mary物件所輸出的結果。他是用帶有一個參數的Method 2建構式,執行Method 2建構式輸出實體變數Name的指令時,Name的值被指定是參數name的值,所以輸出結果為產生Mary物件時所輸入的參數"Mary"
3. 第三,四行為Sam物件所輸出的結果。他是用帶有一個參數的Method 3建構式,而Method 3建構式有2個輸出指令:
3.1 第三行是輸出Name和參數age的值,執行輸出指令時,Name的值被指定是參數name的值
3.2 第四行是直接輸出參數name和參數age的值
*第三,四行輸出結果告訴了我們,「建構式的參數是可以直接運用」
順帶一提,像同樣叫"Human"的Method,但輸入參數的數目或型態不同的運用方式叫Overloading(多載,重載),在之後的文章中會更深入探討
總結一下運用建構式的好處:宣告(產生)一個物件時可以把該物件的屬性(用參數的方式)一起宣告,不必再用多餘的程式碼宣告或設定它的屬性