Java 多態(tài)
java 多態(tài)
多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。
多態(tài)就是同一個(gè)接口,使用不同的范例而執(zhí)行不同操作,如圖所示:
多態(tài)性是對象多種表現(xiàn)形式的體現(xiàn)。
1. 多態(tài)的優(yōu)點(diǎn)
- 1. 消除類型之間的耦合關(guān)系
- 2. 可替換性
- 3. 可擴(kuò)充性
- 4. 接口性
- 5. 靈活性
- 6. 簡化性
2. 多態(tài)存在的三個(gè)必要條件
- 繼承
- 重寫
- 父類引用指向子類對象:parent p = new child();
class shape { void draw() {} } class circle extends shape { void draw() { system.out.println("circle.draw()"); } } class square extends shape { void draw() { system.out.println("square.draw()"); } } class triangle extends shape { void draw() { system.out.println("triangle.draw()"); } }
當(dāng)使用多態(tài)方式調(diào)用方法時(shí),首先檢查父類中是否有該方法,如果沒有,則編譯錯(cuò)誤;如果有,再去調(diào)用子類的同名方法。
多態(tài)的好處:可以使程序有良好的擴(kuò)展,并可以對所有類的對象進(jìn)行通用處理。
3. 多態(tài)的范例
public class test { public static void main(string[] args) { show(new cat()); // 以 cat 對象調(diào)用 show 方法 show(new dog()); // 以 dog 對象調(diào)用 show 方法 animal a = new cat(); // 向上轉(zhuǎn)型 a.eat(); // 調(diào)用的是 cat 的 eat cat c = (cat)a; // 向下轉(zhuǎn)型 c.work(); // 調(diào)用的是 cat 的 work } public static void show(animal a) { a.eat(); // 類型判斷 if (a instanceof cat) { // 貓做的事情 cat c = (cat)a; c.work(); } else if (a instanceof dog) { // 狗做的事情 dog c = (dog)a; c.work(); } } } abstract class animal { abstract void eat(); } class cat extends animal { public void eat() { system.out.println("吃魚"); } public void work() { system.out.println("抓老鼠"); } } class dog extends animal { public void eat() { system.out.println("吃骨頭"); } public void work() { system.out.println("看家"); } }
執(zhí)行以上程序,輸出結(jié)果為:
吃魚 抓老鼠 吃骨頭 看家 吃魚 抓老鼠
4. 多態(tài)的實(shí)現(xiàn)方式
- 重寫
- 接口
- 抽象類和抽象方法