Java中的靜態綁定和動態綁定

     在Java中,當你調用一個方法時,可能會在編譯時期解析,也可能實在運行時期解析,這全取決於究竟是一個靜態方法仍是一個虛方法。若是是在編譯時期解析,那麼就稱之爲靜態綁定,若是方法的調用是在運行時期解析,那就是動態綁定或者延遲綁定。html

     Java是一門面向對象的編程語言,優點就在於支持多態。多態使得父類型的引用變量能夠引用子類型的對象。若是調用子類型對象的一個虛方法(非private,final or static),編譯器將沒法找到真正須要調用的方法,由於它多是定義在父類型中的方法,也多是在子類型中被重寫(override)的方法,這種情形,只能在運行時進行解析,由於只有在運行時期,才能明確具體的對象究竟是什麼。這也是咱們俗稱的運行時或動態綁定(runtime or dynamic binding)。另外一方面,private static和final方法將在編譯時解析,由於編譯器知道它們不能被重寫,全部可能的方法都被定義在了一個類中,這些方法只能經過此類的引用變量進行調用。這叫作靜態綁定或編譯時綁定(static or compile time binding)。全部的private,static和final方法都經過靜態綁定進行解析。這兩個概念的關係,與「方法重載」(overloading,靜態綁定)和「方法重寫」(overriding,動態綁定)相似。動態綁定只有在重寫可能存在時纔會用到,而重載的方法在編譯時期便可肯定(這是由於它們老是定義在同一個類裏面) 編程

區別對比

  • 靜態綁定發生在編譯時期,動態綁定發生在運行時
  • 使用private或static或final修飾的變量或者方法,使用靜態綁定。而虛方法(能夠被子類重寫的方法)則會根據運行時的對象進行動態綁定。
  • 靜態綁定使用類信息來完成,而動態綁定則須要使用對象信息來完成。
  • 重載(Overload)的方法使用靜態綁定完成,而重寫(Override)的方法則使用動態綁定完成。

 

參考博客:編程語言

http://www.importnew.com/14338.htmlide

http://www.cnblogs.com/ShaneZhang/p/4972550.htmlspa

相關文章
相關標籤/搜索