[概念]
 |
pic 1:polymorphism |
每位超級英雄有自己的穿衣風格,蜘蛛人簡單地穿上紅藍蜘蛛衣,
蝙蝠俠回家換上蝙蝠裝,
鋼鐵人拿出箱子,換上鋼鐵裝備,
//Base Class
public class SuperHero{
public void power(){
System.out.println("superhuman strength");
}
public void vest(){
//each hero has their own style
}
}
//Sub Class
public class Spiderman extends SuperHero{
public void power(){
System.out.println("spin a web");
}
public void vest(){
System.out.println("simply change his equipment");
}
}
public class Batman extends SuperHero{
public void power(){
System.out.println("shadow his body");
}
public void vest(){
System.out.println("go cave and put on his equipment");
}
}
public class Ironman extends SuperHero{
public void power(){
System.out.println("energy repulsors");
}
public void vest(){
System.out.println("take out his box and put on his equipment");
}
}
SuperHero這個Base Class並不需要特別實作vest(),
只需要交給個別的Sub Class去實作自己的vest(),
在這情況下,定義了所謂的抽象方法(Abstract Method),意即不特別去實作方法的內容,
一個類別中若包含抽象方法,則可稱為抽象類別(Abstract Class),
需要注意的是,不能生成抽象類別的物件,但可以宣告抽象類別的變數
//Base Class
public abstract class SuperHero{
public void power(){
System.out.println("superhuman strength");
}
public abstract void vest(); //abstract method
}
//Sub Class
public class Spiderman extends SuperHero{
public void power(){
System.out.println("spin a web");
}
public void vest(){
System.out.println("simply change his equipment");
}
}
public class Batman extends SuperHero{
public void power(){
System.out.println("shadow his body");
}
public void vest(){
System.out.println("go cave and put on his equipment");
}
}
public class Ironman extends SuperHero{
public void power(){
System.out.println("energy repulsors");
}
public void vest(){
System.out.println("take out his box and put on his equipment");
}
}
public class Test{
public static void main(String[] args){
SuperHero sh1 = new Spiderman();
SuperHero sh2 = new Batman();
SuperHero sh3 = new Ironman();
sh1.vest(); //"simply change his equipment"
sh2.vest(); //"go cave and put on his equipment"
sh3.vest(); //"take out his box and put on his equipment"
}
}
[細節]
[延伸]
[參考]
1.
良葛格學習筆記
如有錯誤,請不吝指教