多态概述
多态是繼封裝、繼承之後,面向對象的第三大特性。 現實事物經常會展現出多種形态,如學生,學生是人的一種,則一個具體的同學張三既是學生也是人,即出現兩種形态。 Java作為面向對象的語言,同樣可以描述一個事物的多種形态。如Student類繼承了Person類,一個Student的對象便既是Student,又是Person。
多态的定義與格式
多态的定義格式:就是父類的引用變量指向子類對象 父類類型 變量名 = new 子類類型(); 變量名.方法名(); A:普通類多态定義的格式 父類 變量名 = new 子類();
B:抽象類多态定義的格式 抽象類 變量名 = new 抽象類子類();
C:接口多态定義的格式 接口 變量名 = new 接口實作類(); 如: interface Fu { public abstract void method(); } class Zi implements Fu { public void method(){ System.out.println(“重寫接口抽象方法”); } } //接口的多态使用 Fu fu = new Zi();
* 多态的前提: * 子父類的繼承關系 * 方法的重寫 * 父類引用指向子類對象 * 動态綁定:運作期間調用的方法,是根據其具體的類型
多态的成員特點
A:多态成員變量 當子父類中出現同名的成員變量時,多态調用該變量時: 編譯時期:參考的是引用型變量所屬的類中是否有被調用的成員變量。沒有,編譯失敗。 運作時期:也是調用引用型變量所屬的類中的成員變量。 簡單記:編譯和運作都參考等号的左邊。編譯運作看左邊。 B:多态成員方法 編譯時期:參考引用變量所屬的類,如果沒有類中沒有調用的方法,編譯失敗。 運作時期:參考引用變量所指的對象所屬的類,并運作對象所屬類中的成員方法。 簡而言之:編譯看左邊,運作看右邊
多态的向上轉型和向下轉型
多态的轉型分為向上轉型與向下轉型兩種: A:向上轉型:當有子類對象指派給一個父類引用時,便是向上轉型,多态本身就是向上轉型的過程。 使用格式:
B:向下轉型:一個已經向上轉型的子類對象可以使用強制類型轉換的格式,将父類引用轉為子類引用,這個過程是向下轉型。如果是直接建立父類對象,是無法向下轉型的 使用格式:
多态的優缺點
* 多态的優缺點 * 優點:可以提高可維護性(多态前提所保證的),提高代碼的可擴充性 * 缺點:無法直接通路子類特有的成員