複数のディスパッチと関数のオーバーロード


14

私は2つの違いを(もしあれば)理解しようとしています。

Multiple DispatchのWikipediaページによるとこれはFunction Overloadingと同義ですが、その後、次のように言います:

Javaなどの単一ディスパッチのみの言語[…]

Javaは関数のオーバーロードをサポートしているため、これは矛盾のように見えます。

それでどちらですか?マルチディスパッチは関数のオーバーロードとは異なりますか、それともJavaがマルチブルディスパッチをサポートしていないと主張するのは間違っていますか?

回答:


16

複数のディスパッチは(常に)関数のオーバーロードと同じではありませんが、いくつかの類似点があります。また、Javaは複数のディスパッチをサポートしていません。

Javaを含む静的に型付けされた言語では、ディスパッチとオーバーロードの最大の違いは、オーバーロードがパラメーターの静的な型に基づいていることです(つまり、実際に呼び出されるメソッドの選択はコンパイル時に決定されます)が、ディスパッチは動的に基づいていますタイプ(つまり、決定は実行時に行われます)。(そのような言語は通常、複数のディスパッチをサポートしていません。)

しかし、これも用語の問題かもしれません。動的に型付けされた言語では、ディスパッチとオーバーロードは実際には同じものに要約されるようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.