多重ディスパッチ
多重定義を許すプログラミング言語では、同一の名前の(すなわち、多重定義された)関数やメソッドのうちのどれを呼出す(ディスパッチする)かを決定する、ということをしなければならない。
多くのオブジェクト指向プログラミング言語は単一ディスパッチである。すなわち、メソッド呼び出し(Smalltalkなら「メッセージ送信」、C++なら「メンバ関数呼び出し」)において、引数の1つが特別に扱われ、呼び出すべきメソッドの特定に使われる。構文上もその引数を特別に扱い、ドットを挟んで、そのオブジェクトを選択する式と、呼び出すべきメソッドの名前を記述する(例えばspecial.meth(other,args,here))。(これは、そのような言語ではそのメソッドをそのオブジェクトが「所有する」ような形となるため、オブジェクトによって名前空間を指定するのが自然であるため、という理由もある)
多重ディスパッチを採用する言語では、全ての引数をメソッド選択に参加させることが可能である。第一引数、第二引数、第三引数とマッチングを行うが、どれか特定の引数がその関数やメソッドを「所有」しているわけではない。二項演算子(関数)のような、2引数の場合のみを対象とする多重ディスパッチをダブルディスパッチといい、関数やメソッドの多重ディスパッチは無い言語でも、二項演算子にはダブルディスパッチがある、といった言語もある。
多重ディスパッチを採用した初期の例として Common Lisp がある。