close

//抽象類別是一種框架、條件限制,規定繼承者必須要覆寫(自定義)這個方法

//例如一張衣服設計圖的架構,只規定你設計一件衣服須要有「顏色,大小」,至於顏色跟大小分別是多少則不規定

package tw.xxx.myfirstproject.game;

 

abstract class  Character {

    private String name;

    private int blood;

    private 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 abstract void fight();

       // 抽象類別只寫方法名稱,不寫方法(後面是分號非括弧),方法讓下面的子類別自己定義

}

 

class Magician extends Character {

    //必須有一個fight的方法實作,若不實作則可以讓fight也變成抽象方法,這樣的話此類別也需要是抽象類別

    //abstract class Magician extends Character {←因為有fight這個抽象方法,所以類別也需要是抽象的

    //  public abstract void fight();←抽象方法分號結尾

    //  }

    public void fight(){

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

    }

    public void cure() {

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

    }

}

 

class test extends Magician{

    //不需要有fight()方法,因為MagicianCharacter的員工(abstract實作)(也是兒子),但test雖然是Magician的兒子卻不是Character的員工

}

 

class SwordsMan extends Character {

    public void fight() {

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

    }

}

 

 

 

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("-------------");

 

       showBlood(mike);

       showBlood(tim);

 

       drawFight(mike);

       drawFight(tim);

 

    }

 

}

 

arrow
arrow
    全站熱搜

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