學習重點:
- 經由覆寫可以更改繼承到的方法
- 可以使用Base Class的變數來存取繼承class的物件
- 被override的方法須加上virtual
- override的方法其名稱與參數型別都要跟被override的相同
主程式 :
private void button1_Click(object sender, EventArgs e)
{
Player p = new Player("勇者");
Monster m = new Monster("史萊姆");
Villager v = new Villager("村民");
Creature c = m;
string message1 =
v.attack(m);
string message2 =
c.move(); //能以Creature的身份呼叫Monster的方法
MessageBox.Show(message1 + "\n" + message2);
}
Creature 類別 :
class Creature
{
public string name;
public virtual string move() //加了virtual的方法才可被覆寫
{
return name + "向前走";
}
public virtual string attack(Creature target) //加了virtual的方法才可被覆寫
{
return name + "攻擊了" + target.name;
}
}
Player 類別 :
class Player : Creature
{
public Player(string name)
{
this.name = name;
}
}
Monster 類別 :
class Monster : Creature
{
public Monster(string name)
{
this.name = name;
}
public override string move()
{
return name + "橫著走";
}
}
Villager 類別 :
class Villager : Creature
{
public Villager(string name)
{
this.name = name;
}
public override string attack(Creature target) // 覆寫基底類別的此方法
{
return name + "不能攻擊其他人";
}
}
執行結果:
沒有留言:
張貼留言