多重定義
PerlやPHPのような曖昧な型を持つ言語では、関数の多重定義ができない、あるいは制限されていることがある。そのときは関数の先頭で引数の型を判定する条件分岐で対応する。
また、PHPには「オーバーロード」という機能が存在するが、これはプロパティやメソッドを動的に作成するための機能であり、他の多くのオブジェクト指向言語とは異なる意味で用いられている。
多重定義のルックアップ(英: look-up、探索)は実引数の型に応じて静的に解決される。以下のJavaの例では、java.lang.Stringクラスはjava.lang.Objectクラスから派生しているものの、testMethod()は引数の動的な型情報(実行時型情報)によって選択されることはなく、あくまでコンパイル時に解決される静的な型情報に基づいて選択される。
なお、曖昧さを解決できず、多重定義された候補の中から1つを選択することができない場合はコンパイルエラーとなる。前述のC++の例において、曖昧さが解決できないケースを以下に示す。
曖昧さの解決のためには明示的な型変換が必要となる。
一方、前述のC言語の例のように、多重定義を持たず、曖昧さがない場合は暗黙の型変換を利用することができる。