多態的理解:
- 多態是同一個行為具有多個不同表現形式或形態的能力。
- 多態就是同一個接口,使用不同的實例而執行不同操作。
- 多態性是對象多種表現形式的體現。
多態的優點:
1.消除類型之間的耦合關系
2.可替換性
3.可擴充性
4.接口性
5.靈活性
6.簡化性
多態存在的三個必要條件
1.繼承
2.重寫
3.父類引用指向子類對象
比如
1 Parent p = new Child();
當使用多態方式調用方法是,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法。
1 package com.poly.www; 2 3 public class Test { 4 public static void main(String[] args) { 5 show(new Cat()); // 以 Cat 對象調用 show 方法 6 show(new Dog()); // 以 Dog 對象調用 show 方法 7 8 Animal a = new Cat(); // 向上轉型 9 a.eat(); // 調用的是 Cat 的 eat 10 Cat c = (Cat) a; // 向下轉型 11 c.work(); // 調用的是 Cat 的 work 12 } 13 14 public static void show(Animal a) { 15 a.eat(); 16 // 類型判斷 17 if (a instanceof Cat) { // 貓做的事情 18 Cat c = (Cat) a; 19 c.work(); 20 } else if (a instanceof Dog) { // 狗做的事情 21 Dog c = (Dog) a; 22 c.work(); 23 } 24 } 25 } 26 27 abstract class Animal { 28 abstract void eat(); 29 } 30 31 class Cat extends Animal { 32 public void eat() { 33 System.out.println("吃魚"); 34 } 35 36 public void work() { 37 System.out.println("抓老鼠"); 38 } 39 } 40 41 class Dog extends Animal { 42 public void eat() { 43 System.out.println("吃骨頭"); 44 } 45 46 public void work() { 47 System.out.println("看家"); 48 } 49 }
執行以上程序,輸出結果:
吃魚
抓老鼠
吃骨頭
看家
吃魚
抓老鼠
多態的實現方式
- 重寫
- 接口
- 抽象和抽象方法