オーバーロード(overloading)は多態性(polymorphism、ポリモーフィズム)と関係があるのでしょうか?
私は長い間、無関係だと思っていました。しかし、日本語圏で検索すると、オーバーロードは多態性の一種、またはそれを実現する機能、であり、関係があると考える人が多いようです。
- 多態性(多相性) (ポリモーフィズム) 多態性#1 多態性#2 [PDF]
- オーバーロードとオーバーライド、多態性と継承関係をまとめてみた|コンピューターの勉強会・研修ネタ
- 【java】オーバーロードとオーバーライドの違いとは
しかし、
oop - Is Polymorphism , Overloading and Overriding are same concepts? - Stack Overflow
で、Xavi López氏は
Method Overloading is unrelated to polymorphism. ...
メソッドオーバーロードは多態性と無関係です。...
と回答しています。リンクされている他の各質問での回答やコメントでも無関係であると考えている人が多数のようです。
英語圏が全てそうかというと、タイプが違う多態性なだけで、やはり多態性の一つであると考える人もいるようです。
Types of polymorphism in java- Runtime and Compile time polymorphism
において著者は、多態性は実行時多態性(runtime polymorhism、動的多態性、dynamic polymorphism)とコンパイル時多態性(compile time polymorhism、静的多態性、static polymorphism)の二つのタイプに分けることができるのであり、Javaのメソッドオーバーロードはコンパイル時多態性の一つであると主張しています。
私には何が正しくて間違っているかわからなくなってしまいました。オーバーロードと多態性は関係があるのか?あるとしたら、その関係は何なのか?解説をお願いします。
【補足】
ジェネリック、テンプレート、パターンマッチ、動的型付けによるダッグタイピング等とは混合しないようにお願いします。言語特有の違いがある場合は、言語を指定して説明いただきますようお願いします。
【追記】
Polymorphism (computer science) - Wikipedia によると、そもそも多態性は三種類に分かれるとなっています。
- アドホック多態性(ad hoc polymorphism)
- パラメトリック多態性(parametric polymorphism)
- サブタイプ多態性(subtype, subtype polymorphism or inclusion polymorphism)
オーバーロードはアドホック多態性に入るとされているようです。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/05 09:55