//抽象類別是一種框架、條件限制,規定繼承者必須要覆寫(自定義)這個方法
//例如一張衣服設計圖的架構,只規定你設計一件衣服須要有「顏色,大小」,至於顏色跟大小分別是多少則不規定
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()方法,因為Magician是Character的員工(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);
}
}
留言列表