2012-02-27 67 views
7

在不同的來源,我讀過不同的話題。例如維基百科說:動態綁定== Java中後期綁定與否?

後期綁定經常與動態分派混淆,但存在顯着差異。

但幾行後

它是普遍使用的術語在Java編程的動態調度的代名詞後期綁定。具體來說,這是指Java的單一分派機制與虛擬方法一起使用。

那麼,真相在哪裏?這個「顯着差異」是什麼?

+1

您是指延遲加載? – bmoran 2012-02-27 19:15:47

+1

@bmoran:不,他正在談論更基礎的語言層面的事情。請參閱http://en.wikipedia.org/wiki/Late_binding#Late_binding_in_Java和http://en.wikipedia.org/wiki/Dynamic_dispatch。 – Asaph 2012-02-27 19:17:35

回答

6

對於所有意圖和目的,延遲綁定和動態單派發都是相同的。在動態單個分派中,單個對象的值或標識決定了在運行時調用哪個代碼,這就是Java中發生的情況。

術語動態調度一般是最經常用來暗示動態多個調度,這是基於身份或多個對象,這是值,其中被選擇在運行時運行方法CLOS和Smalltalk中的語言功能,但不是Java或C++中的語言功能。

+1

+1,但我將「後期綁定」描述爲像Python這樣的語言的完全延遲調用,而Java的動態單一調度模型實際上是部分早期的,部分後期的綁定,更像是C++虛擬方法。 – 2012-02-27 19:31:59

+0

我曾假設在Java 7中添加的invoke動態執行動態分派。 http://java.sun.com/developer/technicalArticles/DynTypeLang/有什麼區別? – 2012-02-27 19:52:29

+0

@DanielPryden - 事實上,我同意這一點。你所說的「完全遲到」,我稱之爲「鴨子打字」;這基本上是基於方法而不是基於類型的查找。 – 2012-02-27 23:06:14