一方、関数の多重定義をサポートする言語では、関数のシグネチャが異なれば同じ名前を使うことができる。関数には本質的な名前だけを付ければよく、呼び出すときも引数によらず一様に記述できる。
ルックアップ.
曖昧さの解決のためには明示的な型変換が必要となる。
欠点.
関数／メソッドおよび演算子が多重定義された場合、その名前だけで区別することができないので、多重定義の候補のうち、どのバージョンが使われるのかがソースコード上で一見して分かりづらく、可読性が下がる。統合開発環境 (IDE) の中には、構文解析によりどのバージョンがどこで使われているかを列挙してくれるものも存在するが、そういったツールが使えない状況では読み手に詳細なルックアップの知識がないと判別が困難なこともある。
多重定義の例.
FORTRANによる多重定義:
 !省略
 !省略
特徴的なのは関数の定義としては多重定義を認めないものの呼び出し方法として多重定義を認めている点である。呼び出し時の名前と定義の名前は別物であるため混乱の原因となるだけではあるが全く別の名前をつける事も可能になっている。
演算子の多重定義.
多重定義を使った利用者定義演算子の一種である。詳細は当該記事を参照のこと。
オブジェクト指向言語においては数値型とオブジェクトを同じ関数で処理するために必須の機能である(後述のテンプレートと多重定義参照)。
テンプレートと多重定義.
以下に例を示す。
この様にテンプレートと多重定義を備える言語では、多重定義でオーバーライドを代用することができる。
多重定義による多態は、コンパイル時にしか実現できないという問題があるものの単純なオーバーライドでは実現しづらい各種柔軟性を備えている。
まず、メンバー関数だけでなく大域スコープの関数をクラスのインターフェースの一部として見做す事が出来るようになる。これにより、単に手続き型の要素でしか無かった大域スコープの関数をオブジェクト指向機能の一要素として組み入れる事が出来る。そして、大域スコープの関数がインターフェースとして機能し始める事によりクラスだけでなく、intやdouble型といったメンバー関数を持てない型にもオブジェクト指向の恩恵が得られる様になるのである。