overrideとoverloadの違いと使い方がわかりません。わかりやすいウェブサイトをご存じの人いますか? 自分でも調べてみたのですが、なかなか本質的に理解できるものがありません。
はいかがですか?
overrideとoverloadは、たまたま語感が似ているだけで直接的には関係のない概念です。
同じ名前だけど実体が異なる、というところは共通していなくもないですが
基本的には別物と思ってください。
overloadは単に「別々の関数に同じ名前を付けられる」という機能。
IntToStrなどで日常的にお世話になっているはずです。
(もしoverloadがなかったら、引数の型によって IntToStr64, IntToStr32, ... といちいち調べて使い分けないといけなくなります)
一方のoverrideは、virtualと対にして使うもので、オブジェクト指向の実現上不可欠なものです。
親クラスで定義したメソッドを、子クラスで置き換えるのがoverrideです。
「仮想関数」「多態(ポリモーフィズム)」といったキーワードで調べれば解説が見つかると思います。
overloadはよく理解できたのですが、overrideの使い方がいまいちつかめません。どのような状況で使われますか?
> どのような状況で使われますか?
上で書いたように、親クラスのメソッドを子クラスで置き換える時です。
よく使いそうな例で言うと、TStream.WriteをTFileStream.WriteやTMemoryStream.Writeでoverrideする時などです。
overrideはクラスの継承、多態性、仮想関数と結びついているもので
これらの概念がわかれば自然にわかりますし、
逆にそれらの前提知識なしにoverrideの意味だけ説明されても理解できないんじゃないかと思います。
単にDelphiでどういう時にoverrideを使うかという規則が知りたいだけなら
「(ヘルプで調べて)親クラスのメソッドに virtual か override が付いていたら、
子クラスでそのメソッドを実装する時にはoverrideを付けないといけない」
と覚えておけばいいのではないでしょうか。
ツイート | ![]() |