質問: C++/Java/C#だけやっている分には、オーバーロードとオーバーライドの違いはわりとはっきりしています。 オーバーロードはシグネチャ違いで同名メソッドを共存させること、オーバーライドは親クラスのメソッドに違う実装を持ち、実行時に呼ばれる実装がインスタンスのクラスによって決まるようにすること。 C++/C#だと、演算子オーバーロードが出てきます。 なぜオーバーライドでなくオーバーロードなのか。それはこう説明できるでしょう、複数実装を持つ同名メソッドのうち、コンパイル時に解決されるのがオーバーロード、実行時に解決されるのがオーバーライドなのである、と。 これで解決したつもりになっていると、Scala, Swift, Ruby あたりを見たときに困ります。これらだと演算子も普通のメソッドであり、つまり実装の選択は実行時となります。ではこれらの言語では演算子オーバーライドと言っているかというと、やはり演算子オーバーロードと呼ばれている。 ここら辺でわからなくなりました。オーバーライドとオーバーロードの違いは、一体なんでしょうか?
回答: 私は単純にオーバーロードは多重定義、オーバーライドは上書き、と区別しています。 C++の演算子オーバーロードは関数のオーバーロードそのものなので、用語としてはオーバーロードがふさわしいように思います。実際に演算子オーバーロードは既存の処理を上書きするという性質のものではないですし。これはC#でも同様ですね。 コンパイル時かどうかというのはあまり関係ないように思います。 上書きは、C++/C#においては、あるクラスの仮想メソッドを派生クラスで別の処理に置き換えるというケースしかないので、オーバーライドという用語が適用されるのはかなり限定的かと思います。