Java 重寫方法
子類可以繼承父類的對象方法
在繼承後,重複提供該方法,就叫做方法的重寫
又叫覆蓋 Override
步驟 1 : 父類Item
父類Item有一個方法,叫做effect
package property; public class Item { String name; int price; public void buy(){ System.out.println("購買"); } public void effect() { System.out.println("物品使用後,可以有效果"); } }
步驟 2 : 子類LifePotion
子類LifePotion繼承Item,同時也提供了方法effect
package property; public class LifePotion extends Item{ public void effect(){ System.out.println("血瓶使用後,可以回血"); } }
步驟 3 : 調用重寫的方法
調用重寫的方法
調用就會執行重寫的方法,而不是從父類的方法
所以LifePotion的effect會打印:
"血瓶使用後,可以回血"
package property; public class Item { String name; int price; public void effect(){ System.out.println("物品使用後,可以有效果"); } public static void main(String[] args) { Item i = new Item(); i.effect(); LifePotion lp =new LifePotion(); lp.effect(); } }
步驟 4 : 如果沒有重寫這樣的機制怎麼樣?
如果沒有重寫這樣的機制,也就是說LifePotion這個類,一旦繼承了Item,所有方法都不能修改了。
但是LifePotion又希望提供一點不同的功能,爲了達到這個目的,只能放棄繼承Item,重新編寫所有的屬性和方法,然後在編寫effect的時候,做一點小改動.
這樣就增加了開發時間和維護成本
package property; public class Item { String name; int price; public void buy(){ System.out.println("購買"); } public void effect() { System.out.println("物品使用後,可以有效果"); } }package property; public class LifePotion { String name; int price; public void buy(){ System.out.println("購買"); } public void effect(){ System.out.println("血瓶使用後,可以回血"); }}
練習: 重寫
(設計一個類MagicPotion 藍瓶,繼承Item, 重寫effect方法
並輸出 “藍瓶使用後,可以回魔法”)
答案:
package property; public class MagicPotion extends Item{ public void effect(){ System.out.println("藍瓶使用後,可以回魔法"); }} |