package tw.xxx.myfirstproject.game;

 

class  Character {

    protected String name;

    protected int blood;

    protected int level;

 

    public  String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public int getBlood() {

       return blood;

    }

    public void setBlood(int blood) {

       this.blood = blood;

    }

    public int getLevel() {

       return level;

    }

    public void setLevel(int level) {

       this.level = level;

    }

    public void fight(){

      

    }

    public String toString(){

       return String.format("(%s,%d,%d)",this.name,this.level,this.blood);

 

    }

   

    public Character copy(){

       return new Character();

    }

    //測試父子類別間的關係

   

 

}

 

class Magician extends Character {

    public void fight(){

       System.out.println("Magician fight");

    }

    public void cure() {

       System.out.println("MAGIC cure");

    }

    public String toString(){

       return "Magician"+super.toString();

       //文字+呼叫父類別的toString(方法)回應

       //因為父類別回應的類型也是字串所以可以自己連起來

       //但不能呼叫父類別的private

       //重新定義時,子類別的類型範圍只能比父類別大,不能比父類別小

       //例如父類別的toString()若是proctected,兒子類別只能是public

    }

    @Override

    public Magician copy(){

       return new Magician();

    }

    //原本JDK5之前因為輸入與回傳類別與父類別的不一樣,所以無法說他是@Override,在JDK5後,重新定義方法時如果返回的型態是父類別中方法(被覆載的那個方法)返回型態的子類別,則可以通過編譯

 

}

class SwordsMan extends Character {

    public void fight() {

       System.out.println("SwordsMan fight");

    }

    public String toString(){

       return "SwordsMan"+super.toString();

    }

}

public class GamePolymorphismEx1 {

    static void showBlood(Character character) {

       System.out.println("角色血量為=" + character.getBlood());

    }

    static void drawFight(Character character) {// ******宣告為父類別(Character)型態

       character.fight();

    }

    public static void main(String[] args) {

       SwordsMan mike = new SwordsMan();

 

       mike.setName("Mike");

       mike.setBlood(100);

       mike.setLevel(0);

 

       System.out.println("Name=" + mike.getName());

       System.out.println("Blood=" + mike.getBlood());

       System.out.println("level=" + mike.getLevel());

       System.out.println("-------------");

 

       Character tim = new Magician();

       tim.setName("Tim");

       tim.setBlood(80);

       tim.setLevel(0);

 

       System.out.println("Name=" + tim.getName());

       System.out.println("Blood=" + tim.getBlood());

       System.out.println("level=" + tim.getLevel());

       System.out.println("-------------");

 

      

       System.out.println(mike.toString());

       System.out.println(tim);

       //因為toString是預設,所以不用打也會出現,但是如果沒有覆寫toString,那就會出現記憶體地址

 

    }

 

}

 

arrow
arrow
    全站熱搜

    乙方 發表在 痞客邦 留言(0) 人氣()