標籤:
多態和抽象從繼承引出來的兩個重要的概念,多態允許以多種形式存在,而抽象則允許建立抽象類別。
在Java中,多態有兩種理解方式:第一種是對象的不同的方法可以用相同的一個方法名,也就是重載的概念。另一種是同一對象根據不同的訊息執行相應的行為,也可以這樣認為發送訊息給某一對象,讓對象自行選擇哪種相應的行為。根據這兩種方式,所以多態分為靜態多態和動態多態:
■靜態多態指的是程式在編譯時間,系統就能決定調用哪個方法,所以也稱為編譯時間多態。在Java中,靜態多態實現的方法就是方法重載,其調用規則是依據對象在定義時的類型相應地調用對應類中的重載方法。
■動態多態指在運行中系統才能動態確定方法所指的對象,所以也稱為運行時多態。動態多態的實現方式是重寫父類的同名成員方法,其調用規則是依據對象在執行個體化時而非定義時的類型,相應地調用對應類中的同名成員方法。也就是說,動態多態主要通過動態綁定和重寫的機制來實現。
在Java中,使用動態綁定和重寫機制來實現多態,首先要掌握如下三個基礎技術概念:
■向上轉型技術:一個父類的引用變數可以指向不同的子類對象,或者說一個子物件可以被當做一個父類類型。
■instanceof關鍵字:instanceof關鍵字用於判斷運行時對象的真正類型。
■動態綁定技術:運行時根據父類引用變數所指對象的實際類型執行相應的子類方法,從而實現多態性。
向上轉型和向下轉型
向上轉型:從低精度向高精度轉換實行自動轉換向下轉型:從高精度向低精度轉換,用強制轉換對於引用資料類型不可以和基礎資料型別 (Elementary Data Type)轉換引用資料類型必須是繼承關係父類的引用指向子類的對象,才可以通過eg:Father fa = new Son();Son son = (son) new Father();(不能通過)eg:Father fa = new Son();Son son = (son)fa;(通過)(一個父類的引用變數可以指向不同的子類對象或者說一個子物件可以被當做一個父類類型)
在Java中,如果我們不需要類的執行個體化時,就可以將類設計成為一個抽象類別。所謂抽象類別,是不能被執行個體化的類。在抽象類別中,類的所有的其他功能都存在,成員變數、方法、構造器都可以用同樣的方式訪問,我們只是不能建立抽象類別的執行個體。使用關鍵字abstract可以聲明一個抽象類別,該關鍵字可以出現在類聲明時class關鍵字前的任何地方。
將一個方法聲明為抽象方法有兩個結果:①類也必須聲明為抽象類別。如果一個類包含了抽象方法,那麼該類也必須是抽象類別;②任何子類必須重寫抽象方法,除非子類本身也是抽象的。
抽象方法沒有方法體,一個包含抽象方法的類也必須聲明為抽象類別。抽象方法必須在抽象類別的所有子類中被重寫。
JAVA——多態和抽象