這一篇是純練習,上一篇是把不同的物件結合,這一次我想試試同類物件的結合是否也可以,結論是可行的。以下程式碼改寫自之前的程式碼,內容是讓同為圓桌武士的藍斯洛特和伊萊恩結婚(即結合)。
父類別:
/* 父類別:人類 */
// 編寫人:Lancelot Cheng
public class Human {
public String name, brithday, blood;
// 我發現父類別的變數要設 public 子類別才能繼承,不然就是要設 getter and setter 吧。
// 父類別的建構子
public Human(String name, String brithday, String blood){
this.name = name;
this.brithday = brithday;
this. blood =blood;
}
void showBasical() {
System.out.println( "名字:" + name + ";生日:" + brithday + ";血型:" + blood);
}
}
子類別:
/* 子類別:圓桌武士(kinghts of the round table) */
// 編寫人:Lancelot Cheng
public class KinghtsRoundTable extends Human {
private String title, weapon;
private KinghtsRoundTable spous; // *** 宣告一個圓桌士的配偶
// 建構子
public KinghtsRoundTable (String nn, String bD, String bb, String tt, String ww) {
super(nn, bD, bb); // 使用父類別的建構子。
title = tt;
weapon = ww;
}
public void merried (KinghtsRoundTable spo){ // *** 承接主程式中指定的物件
spous = spo;
}
// 展現圓桌武士的檔案
public void showKinght() {
System.out.println("==圓桌武士==");
showBasical(); // 因為有繼承父類別,所以可以直接使用其方法,父類別和子類別的方法名稱必須不同。
System.out.println("稱號:" + title + ";武器:" + weapon);
if(spous == null) {
System.out.println("配偶:" + " (為了你而空著)");
}
else{
System.out.println("配偶:" + spous.name);
}
System.out.println();
}
}
主程式:
/* 主程式 */
// 編寫人:Lancelot Cheng
public class Main {
public static void main(String[] args) {
System.out.println();
// 產生藍斯洛特圓桌武士物件,並給值與展現其值。
KinghtsRoundTable lancelot = new KinghtsRoundTable("藍斯洛特", "1228","AB", "騎士之花", "樹枝");
// 產生伊萊恩圓桌武士物件,並給值與展現其值。
KinghtsRoundTable elaine = new KinghtsRoundTable("伊萊恩", "0906","B", "聖杯少女", "音爆長鞭");
System.out.println("結婚前資料");
System.out.println();
lancelot.showKinght();
elaine.showKinght();
System.out.println("執行結婚~"); // ***
lancelot.merried(elaine); // 指定配偶是伊萊恩
elaine.merried(lancelot); // 指定配偶是藍斯洛特
System.out.println("結婚完畢!");
System.out.println();
System.out.println("結婚後資料");
System.out.println();
lancelot.showKinght();
elaine.showKinght();
}
}
結果:
結婚前資料
==圓桌武士==
名字:藍斯洛特;生日:1228;血型:AB
稱號:騎士之花;武器:樹枝
配偶: (為了你而空著)
==圓桌武士==
名字:伊萊恩;生日:0906;血型:B
稱號:聖杯少女;武器:音爆長鞭
配偶: (為了你而空著)
執行結婚~
結婚完畢!
結婚後資料
==圓桌武士==
名字:藍斯洛特;生日:1228;血型:AB
稱號:騎士之花;武器:樹枝
配偶:伊萊恩
==圓桌武士==
名字:伊萊恩;生日:0906;血型:B
稱號:聖杯少女;武器:音爆長鞭
配偶:藍斯洛特
Process finished with exit code 0
不過圓桌武士裡面好像沒有女性,所以我就選了喜歡藍斯洛特,又曾女扮男裝參加騎馬槍擊比賽的伊萊恩當圓桌武士。在故事裡是悲戀,那就讓她在程式裡是美好結局吧。
除了同類型的物件可以結合,我也試了物件是否可以自己跟自己結合,答案也是肯定的,只是這完全沒有意義就是了。
這邊介紹一下模糊化的寫法,在這篇中的子類別,我宣告的配偶是圓桌武士物件,也就是說,圓桌武士只能跟同為圓桌武士的人結婚,如果想跟其他的人類型物件結婚,就必須再多宣告其他物件與相對應的承接方法。如果我的人物類別又很多,就會寫死我了。而模糊化的寫法就可以解決這個問題。方法就是宣告配偶為人類物件,而人類別為所有人型物件的父類別,由它去承接就可以了,任何它的子類別人型物件都可以由它來承接。這個模糊化寫法以後會再寫一篇介紹。
我這裡的寫法是只有圓桌武士的物件可以結婚,如果想要讓其他的人類的物件也可以結婚,就必須再各別寫上方法,這樣不是很麻煩嗎?有方便一點的方式嗎?我的答案是把結婚的方法寫到父類別裡面,其子類別自然就會繼承結婚的方法了。
這裡的結婚其實是只是相互指派物件給對方承接,事實上也可以另外寫方法來做這件事,不過對於想要學習的人來說,應該會比較不方便理解我在做什麼。
沒有留言:
張貼留言