前期綁定和後期綁定的區別

        在java多態調用中,對於需要傳入一個類的方法,我們可以傳入該類的子類,從而調用子類的重寫後的方法。之所以編譯器可以確定調用哪個對象的方法,主要跟前期綁定和後期綁定有關。

綁定

        將一個方法調用同一個方法主題關聯起來稱作綁定

前期綁定

        程序執行前進行綁定(也就是說在編譯過程中就已經知道這個方法到底是哪個類中的方法)。編譯程序時,在出現函數調用的時候,會產生一個對具體函數名字的引用,這樣在程序運行的時候,執行到函數調用的語句,就會發現這裏一個對XXX方法的引用,就會把執行邏輯解析到這個XXX方法的絕對地址上,例如final(final會關閉後期綁定),static,private,構造方法,成員變量(包括靜態及非靜態)都是屬於前期綁定,C方法調用都是前期綁定

後期綁定(動態綁定或運行時綁定)

        程序在運行前虛擬機並不知道類的類型,運行時根據對象的類型進行綁定。後期綁定主要通過對象中安置某種“配置信息”,然後利用這一段信息,虛擬機可以計算出該對象的方法地址,然後去調用,實現了類型的識別和方法的調用。

動態綁定的過程:

  1. 虛擬機提取對象的實際類型的方法表;
  2. 虛擬機搜索方法簽名;
  3. 調用方法。

        除了前期綁定的,其他都是後期綁定。

 

參考文章:

  1.   前期綁定 和 後期綁定
  2.   Java前期(靜態)綁定和後期(動態)綁定
  3.   Java編程思想
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章