這邊直接拿前面寫過的程式來改, 在類別裡面設好建構子後,主程式裡可以直接在產生物件時直接給變數值,同時,如果這些變數之後不會更動,則類別裡面也可以不設定這些變數的 setter 。
類別程式碼如下:
// 編寫人:Lancelot Cheng
public class Person {
// 這個類別是人類共有屬性的集合,理想上是人都會有的屬性,不過我這邊把它當成遊戲人物。
// 字串名字
private String name;
// 整數年齡
private int age;
// 字串稱號,宇串武器,整數力量,整數傷害
private String title, weapon;
private int power, hurt;
// 以下是建構子。
public Person( String n, int a, String t, String w, int p) {
name = n;
age = a;
title = t;
weapon = w;
power = p;
}
static String king = "亞瑟";
// static 在記憶體上是唯一的位置,當類別被使用到時就產生了,不用到 new 出物件才產生。
// 也就是說 king 是 person 物件與其子類的物件所共享的變數。
static public final String species = "人類";
// 此變數是 static final ,即代表它是所有 person 物件及其子物件所共享的常數,即唯一且不能修改。
// 以下方法用來顯示物件的資料。
void showFile() { // 靜態方法。
System.out.println( "名:" + name +",年紀:" + age + ",稱號:" +
title + ",力量:" + power +",種族:"+ species + ",效忠:" + king);
}
// 以下方法是物件的傷害能力。
void attack() { // 靜態方法。
System.out.println("使用" + weapon);
hurt = power*power;
System.out.println("給予敵人傷害" + hurt);
}
public static String getKing() {
return king;
}
public static void setKing(String king) {
Person.king = king;
}
}
主程式碼如下:
// 編寫人:Lancelot Cheng
public class PersonInformation {
public static void main(String[] args) {
Person lancelot = new Person("藍斯洛特", 18, "湖上騎士", "樹枝", 1000);
Person guinevere = new Person( "桂妮薇兒", 17, "人間的海倫", "梅玫刺劍", 800);
lancelot.showFile();
lancelot.attack();
System.out.println();
guinevere.showFile();
guinevere.attack();
System.out.println();
Person.setKing("自己"); // 靜態變數也稱類別變數,故可以直接用類別名稱操作。
System.out.println("在 Person.setKing 更改後。");
lancelot.showFile(); // 兩個人效忠的對像會一起改變,理由見 Person 類別內變數 king 的註解。
guinevere.showFile();
}
}
執行結果:
名:藍斯洛特,年紀:18,稱號:湖上騎士,力量:1000,種族:人類,效忠:亞瑟
使用樹枝
給予敵人傷害1000000
名:桂妮薇兒,年紀:17,稱號:人間的海倫,力量:800,種族:人類,效忠:亞瑟
使用梅玫刺劍
給予敵人傷害640000
在 Person.setKing 更改後。
名:藍斯洛特,年紀:18,稱號:湖上騎士,力量:1000,種族:人類,效忠:自己
名:桂妮薇兒,年紀:17,稱號:人間的海倫,力量:800,種族:人類,效忠:自己
Process finished with exit code 0
沒有留言:
張貼留言