2012-02-27 19 views
7

さまざまな情報源で、私はそのトピックについてさまざまなことを読んだ。例えば、Wikipediaは次のように言っています:動的バインディング== Javaでの遅延バインディングかどうか?

遅延バインディングは、しばしば動的ディスパッチと混同されますが、大きな違いがあります。

しかし、数行後に

動的ディスパッチの同義語として、Javaプログラミングにおける遅延バインディング用語を使用することが人気です。具体的には、仮想メソッドで使用されるJavaの単一のディスパッチ機構を指します。

真実はどこですか?そして、この "重要な違い"は何ですか?

+1

Lazy loadingを参照していますか? – bmoran

+1

@bmoran:いいえ、彼はもっと基本的な言語レベルのことを話しています。 http://en.wikipedia.org/wiki/Late_binding#Late_binding_in_Javaとhttp://ja.wikipedia.org/wiki/Dynamic_dispatchを参照してください。 – Asaph

答えて

6

レイトバインディングと動的シングルディスパッチは、すべての目的と目的で同じです。動的シングルディスパッチでは、実行時に呼び出されるコードが1つのオブジェクトの値またはIDによって決まります。これはJavaで発生します。

一般に用語動的ディスパッチは、ほとんどの場合、ランタイム・メソッドは同一又はある1つより多くのオブジェクト、の値に基づいて、実行時に選択されている動的複数ディスパッチを暗示するために使用されCLOSとSmalltalkの言語機能ですが、JavaやC++では使用できません。

+1

+1ですが、私はPythonのような言語の完全に遅くバインドされた呼び出しとして「遅延バインディング」を特徴付けていましたが、Javaの動的単一ディスパッチモデルは実際は部分的に早く部分的に遅いバインディングであり、 。 –

+0

私はJava 7で追加された動的呼び出しが動的ディスパッチを実行したと仮定していました。 http://java.sun.com/developer/technicalArticles/DynTypeLang/違いは何ですか? –

+0

@DanielPryden - 確かに、私はそれに同意するでしょう。あなたが「完全に遅い」と呼んでいるのは、私は「ダックタイピング」と呼んでいます。これは基本的に型ベースのルックアップではなくメソッドベースです。 –

関連する問題