天天看點

Java多态之前期靜态綁定與後期動态綁定

多态是面向對象中一個非常重要的功能,因為多态對象在運作的時候才知道真正類型是什麼。在java中對方法的調用分為靜态綁定和動态綁定兩個功能。

方法調用

---->解析 (編譯時綁定,靜态綁定,有私有方法、final方法等唯一确認無法重寫的方法)

----->分派

|----->靜态分派 (重載的方法,也是可以唯一确認的方法,也是靜态綁定)

|----->動态分派(重寫的方法,存在多個相同的特征簽名,動态綁定,運作時确認類型)

靜态綁定

靜态綁定的意思是在編譯的時候就确定要調用的方法,就直接指向要調用的方法,該種類型隻有具有以下修飾符的才會是:屬性、【final、static、private的方法】,因為在編譯的時候就确定了,是以調用的是聲明對象的方法,而不是引用對象的。

動态綁定

動态綁定的意思是因為在多态中,真實的對象類型是運作時候才能真正确定的,是以調用到的方法是根據後期對象真實引用的對象的方法。

補充

什麼時候才用動态綁定??

原因:不同的方法具有相同的特征簽名(唯一辨別),在編譯的時候會不知道具體調用那個方法,是以隻有在運作的時候才能确認具體調用那個方法。
           

為什麼多态要是動态綁定,而不是靜态綁定呢??

原因: java代碼中确認唯一方法是根據方法名+參數順序+參數類型進行确認的。在多态中,大家都知道,會重寫某些方法。因為方法是重寫,是以方法名+參數順序+參數類型都是一樣的。是以同一個方法會存在多個,這個在編譯的時候就不能完全定位到一個确認的方法。隻有在運作的時候根據實際的類型進行确認到一個方法,是以才要采用動态綁定。
           

為什麼重載是靜态綁定??

原因:重載的方法,參數順序或者參數類型肯定不同,是以具有不同的特征簽名(唯一辨別),是以在編譯的時候可以确認唯一的方法。