在java多态調用中,對于需要傳入一個類的方法,我們可以傳入該類的子類,進而調用子類的重寫後的方法。之是以編譯器可以确定調用哪個對象的方法,主要跟前期綁定和後期綁定有關。
綁定
将一個方法調用同一個方法主題關聯起來稱作綁定
前期綁定
程式執行前進行綁定(也就是說在編譯過程中就已經知道這個方法到底是哪個類中的方法)。編譯程式時,在出現函數調用的時候,會産生一個對具體函數名字的引用,這樣在程式運作的時候,執行到函數調用的語句,就會發現這裡一個對XXX方法的引用,就會把執行邏輯解析到這個XXX方法的絕對位址上,例如final(final會關閉後期綁定),static,private,構造方法,成員變量(包括靜态及非靜态)都是屬于前期綁定,C方法調用都是前期綁定
後期綁定(動态綁定或運作時綁定)
程式在運作前虛拟機并不知道類的類型,運作時根據對象的類型進行綁定。後期綁定主要通過對象中安置某種“配置資訊”,然後利用這一段資訊,虛拟機可以計算出該對象的方法位址,然後去調用,實作了類型的識别和方法的調用。
動态綁定的過程:
- 虛拟機提取對象的實際類型的方法表;
- 虛拟機搜尋方法簽名;
- 調用方法。
除了前期綁定的,其他都是後期綁定。
參考文章:
- 前期綁定 和 後期綁定
- Java前期(靜态)綁定和後期(動态)綁定
- Java程式設計思想