在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,動態綁定)相似。動態綁定只有在重寫可能存在時纔會用到,而重載的方法在編譯時期便可肯定(這是由於它們老是定義在同一個類裏面) 編程
參考博客:編程語言
http://www.importnew.com/14338.htmlide
http://www.cnblogs.com/ShaneZhang/p/4972550.htmlspa