綁定指的是把方法名和對應(yīng)的方法聯(lián)系在一起。什么時候需要綁定呢?
- 方法有重載時。因為有多個同名方法,所以根據(jù)參數(shù)列表確定是哪個方法。是為靜態(tài)綁定
- 方法有重寫時。子類對父類的方法進(jìn)行了重寫。當(dāng)用父類的指針調(diào)用某個方法時,要確定到底調(diào)用的是哪個類的方法。是為動態(tài)綁定。
要理解,先要說下對象的內(nèi)存模型
對象中有段空間是用來保存類信息的,其中就有函數(shù)表的指針。函數(shù)表是個什么東西?可以理解為在編譯階段類的方法被編譯放在一段內(nèi)存中。而且會生成一個方法表(可以把它理解成一個數(shù)組),表里面依次保存著方法的指針。比如有三個重載的方法,他們在表里的位置為 1,2 ,3。那么在編譯階段就會根據(jù)參數(shù)列表發(fā)生靜態(tài)綁定,比如說綁定到 2。這時編譯器是不管這個 2 是父類的 2,還是子類的 2 的。而子類的方法和父類的同名同參數(shù)列表的方法在方法表中的順序是一樣的。在運行時,從對象的函數(shù)表里去取相應(yīng)的函數(shù)。這時才發(fā)生了最終的綁定,也可以說動態(tài)綁定。