天天看點

白話關于JAVA多态中的動态綁定

資料抽象,繼承,多态是java的三大特征,可見了解多态對于學習java的重要性,多态不但能夠改善代碼的組織結構和可讀性,還能夠讓程式更加的具有可拓展性。

那什麼是綁定呢?綁定就是說:一個方法的調用與方法所在的類(方法主體)關聯起來。簡單的來說,我的了解是對象的引用指向的是哪個類,類的類型和方法是否相同,

靜态綁定(前期綁定):即在程式執行前,即編譯的時候已經實作了該 方法與所在類的綁定,像C就是靜态綁定。具體過程就是執行這個方法,隻要到這個類的方法表裡拿出這個方法在記憶體裡的位址,然後就可以執行了。java中隻有static,final,private,和構造方法是靜态綁定,其他的都屬于動态綁定,而private的方法其實也是final方法(隐式),而構造方法其實是一個static方法(隐式),是以可以看出把方法聲明為final,第一可以讓他不被重寫,第二也可以關閉它的動态綁定。

動态綁定(後期綁定):運作時根據對象的類型進行綁定,java中的大多數方法都是屬于動态綁定,也就是實作多态的基礎。java實作了後期綁定,則必須提供一些機制,可在運作期間判斷對象的類型,并分别調用适當的方法。也就是說,編譯的時候該方法不與所在類綁定,編譯器此時依然不知道對象的類型,但方法調用機制能自己去調查,找到正确的方法主體。java裡實作動态綁定的是JVM.

所謂的動态綁定,其實就是在子類中重寫了父類中的方法,當父類引用指向子類對象的時候,調用的方法将不在被使用父類中的方法,取而代之的是子類中的方法。

例如:

public class Persion {

public void run(){

System.out.println("人可以行走");

}

public void speak(){

System.err.println("父類說的話");

}

}

public class Sun extends Persion{

//重寫了父類中的speak()方法

public void speak(){

System.err.println("子類說的話");

}

public static void main(String[] args) {

Persion persion=new Sun();

persion.run();

persion.speak();

}

}

以上是我對動态綁定的了解,有不對的地方請大家多多指教