摘要:概念所謂多態,就是指一個引用變量類型在不同的情況下的多種狀態。需進行強制轉換有風險,最好使用進行判斷。繼承在多態中必須存在有繼承關系的子類和父類。在中有兩種形式可以實現多態繼承和接口。
概念
所謂多態,就是指一個引用變量(類型)在不同的情況下的多種狀態。也可以理解為,多態是指通過指向父類的指針,來調用在不同子類中實現的方法。多態性是對象多種表現形式的體現
多態性嚴格來說有兩種描述形式:
方法的多態性:
方法的重載
方法的重寫
對象的多態性: 指的是發生在繼承關系類之中,子類和父類之前的轉換問題
向上轉型 : 父類 父類對象 = 子類實例
向下轉型 : 子類 子類對象 = (子類)父類實例 。 需進行強制轉換,有風險,最好使用 instanceof 進行判斷。
class A { public void fun(){ System.out.println("A "); } } class B extends A{ public void fun(){ //重寫父類方法 System.out.println("B"); } } public class testDemo { public static void main(String[] args) { A a = new B(); //向上轉型 B b = (B)a; //向下轉型 a.fun(); // a.funb(); //父類中不能調用子類中擴展的方法 b.fun(); System.out.println(a instanceof A); System.out.println(a instanceof B); System.out.println(b instanceof A); System.out.println("**********"); A a2 = new A(); System.out.println(a2 instanceof A); System.out.println(a2 instanceof B); } } 輸出結果: B B true true true ********** true false
Java實現多態有三個必要條件:繼承、重寫、向上轉型。
繼承:在多態中必須存在有繼承關系的子類和父類。
重寫:子類對父類中某些方法進行重新定義,在調用這些方法時就會調用子類的方法。
向上轉型:在多態中需要將子類的引用賦給父類對象,只有這樣該引用才能夠具備技能調用父類的方法和子類的方法。
只有滿足了上述三個條件,我們才能夠在同一個繼承結構中使用統一的邏輯實現代碼處理不同的對象,從而達到執行不同的行為。
對于Java而言,它多態的實現機制遵循一個原則:當超類對象引用了子類對象時,被引用對象的類型而不是引用變量的類型決定了調用誰的成員方法,但是這個被調用的方法必須是在超類中定義過的,也就是說被子類覆蓋的方法。
多態分為編譯時多態和運行時多態。其中編輯時多態是靜態的,主要是指方法的重載,它是根據參數列表的不同來區分不同的函數,通過編輯之后會變成兩個不同的函數,在運行時談不上多態。而運行時多態是動態的,它是通過動態綁定來實現的,也就是我們所說的多態性。
在Java中有兩種形式可以實現多態:繼承和接口。
多態的優點消除類型之間的耦合關系
可替換性
可擴充性
接口性
靈活性
簡化性
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73555.html
摘要:多態性面向對象三大特性封裝繼承多態。面向對象多態性存在的三個必要條件繼承重寫父類引用指向子類對象多態性的實現方式重寫與重載靜態多態性方法重載方法重載允許類具有多個相同名稱的方法,但是方法參數列表不同。 多態性 面向對象(OOP)三大特性:封裝、繼承、多態。 多態性(polymorphism)指同一行為具有多種不同表現形式,在面向對象程序設計中表現為同一消息可以根據發送對象的類型不同,做...
摘要:目錄介紹問題匯總具體問題好消息博客筆記大匯總年月到至今,包括基礎及深入知識點,技術博客,學習筆記等等,還包括平時開發中遇到的匯總,當然也在工作之余收集了大量的面試題,長期更新維護并且修正,持續完善開源的文件是格式的同時也開源了生活博客,從年 目錄介紹 00.Java問題匯總 01.具體問題 好消息 博客筆記大匯總【16年3月到至今】,包括Java基礎及深入知識點,Android技...
摘要:也就是說,一個實例變量,在的對象初始化過程中,最多可以被初始化次。當所有必要的類都已經裝載結束,開始執行方法體,并用創建對象。對子類成員數據按照它們聲明的順序初始化,執行子類構造函數的其余部分。 類的拷貝和構造 C++是默認具有拷貝語義的,對于沒有拷貝運算符和拷貝構造函數的類,可以直接進行二進制拷貝,但是Java并不天生支持深拷貝,它的拷貝只是拷貝在堆上的地址,不同的變量引用的是堆上的...
摘要:具體而言就是高層模塊不依賴于底層模塊,二者都同依賴于抽象抽象不依賴于具體,具體依賴于抽象。 9.接口 9.1 抽象類和抽象方法 抽象類:包含抽象方法的類,自身無法實例化 抽象方法:僅有聲明,沒有方法體 關系:抽象方法是抽象類的充分不必要條件,因此抽象類中允許方法實現和抽象方法同時存在 語法 // 抽象類 abstract class ClassName{} // 抽象方法 ab...
閱讀 1198·2021-11-10 11:35
閱讀 2925·2021-09-24 10:35
閱讀 2957·2021-09-22 15:38
閱讀 2807·2019-08-30 15:43
閱讀 1338·2019-08-29 18:39
閱讀 2557·2019-08-29 15:22
閱讀 2788·2019-08-28 18:17
閱讀 611·2019-08-26 13:37