多態就是指一個引用變數倒底會指向哪個類別的實例對象,該引用變數發出的方法呼叫到底是哪個類別中實現的方法,必須在由程式運作期間才能決定。 (建議學習:java課程)
因為程式運作時才確定特定的類,這樣,不用修改原始程式碼,就可以讓引用變數綁定到各種不同的類別實作上,從而導致該引用呼叫的具體方法隨之改變,即不修改程式碼就可以改變程式執行時所綁定的具體程式碼,讓程式可以選擇多個運行狀態,這就是多態性。
特點:
指向子類別的父類別引用由於向上轉型了,它只能存取父類別中擁有的方法和屬性,而對於子類別中存在而父類別中不存在的方法,該引用是不能使用的,儘管是重載該方法。
若子類別重寫了父類別中的某些方法,在呼叫該些方法的時候,必定是使用子類別中定義的這些方法(動態連接、動態呼叫)。
Java實作多型有三個必要條件:繼承、重寫、往上轉型。
呼叫的優先權方法,該優先權為:this.show(O)、super.show(O)、this.show((super)O)、super.show((super )O)。
多態的實作原理
Java 裡物件方法的呼叫是依賴類別資訊裡的方法表實現的。
整體而言,當呼叫物件某個方法時,JVM會尋找該物件類別的方法表以決定該方法的直接引用位址,有了位址後才真正呼叫該方法。
超類別繼承父類別的方法,如果不Overriding該方法,那麼呼叫時會指向父類別的方法。如果Overrding該方法,那麼指向該類別的程式碼區。
但是超類別會存有父類別的方法表。
我們知道java程式運行時,類別的相關資訊放在方法區,在這些資訊中有個叫方法表的區域,該表包含有該類型所定義的所有方法的信息和指向這些方法實際程式碼的指標。
以上是java是如何實現多型的的詳細內容。更多資訊請關注PHP中文網其他相關文章!