靜態分派和動態分派

2021-09-24 21:14:39 字數 452 閱讀 3820

靜態分派:所有依賴靜態型別來定位方法執行版本的分派成為靜態分派,發生在編譯時期,典型**應用為方法過載。靜態分派發生在編譯階段,因此確定靜態分派的動作實際上不是由虛擬機器來執行的。

動態分派:典型應用為重寫,是一種動態的概念。

向上轉型後呼叫子類覆寫的方法便是乙個很好地說明動態分派的例子。就是說,我們在判斷執行的方法是父類中的方法還是子類中覆蓋的方法時;如果用靜態型別來判斷,那麼無論怎麼進行向上轉型,都只會呼叫父類中的方法,但實際情況是,根據對父類例項化的子類的不同,呼叫的是不同於子類中覆寫的方法,很明顯,這裡是要根據變數的實際型別來分派方法的執行版本的。但是實際型別的確定需要在程式執行時才能確定下來,這種在執行期根據實際型別確定方法執行版本的分派過程稱為動態分派。

動態分派的實現是在方法區中建立方法表。如果子類沒有重寫父類的方法,則子類虛方法表中該方法的入口位址與父類指向相同,否則子類方法表中的位址會替換為指向子類重寫的方法的入口位址。

靜態分派與動態分派

1.靜態分派就是按引數的靜態型別而不是實際型別定位方法呼叫版本的過程,發生在編譯期間。過載的本質就是靜態分派,在編譯期間根據引數的靜態型別決定要呼叫的方法。過載demo public class staticdispatch static class man extends human static...

動態分派與靜態分派

包括靜態分派和動態分配。靜態分派 所有依賴今天型別來定位方法執行版本的分派稱為靜態分派,發生那邊應階段典型應用為方法過載靜態分派發生在編譯階段,因此靜態分派的動作實際上並不是虛擬機器來完成的。動態分派 典型應用為重寫,是一種動態的概念。向上轉型後呼叫子類覆寫的方法便是乙個很好的說明動態分配的例子。很...

深入理解JVM之七 靜態分派與動態分派

public class o static class b extends a static class c extends a public void a a a public void a b b public void a c c public static void main string ...