オーバーロードとは
・多重定義、overload
・同一クラスの中で行う(?)
・オブジェクト指向プログラミングの技法のひとつ
・引数や戻り値が異なるが名称が同一のメソッドを複数定義すること
・同一名称の関数(メソッド)を複数個定義し、引数の違いで区別する
※メソッドは、クラス内に定義した関数。処理の塊、手法。
・引数の型が異なる同名のメソッドを予め複数定義しておく
→ メソッドを呼び出すときに選択肢ができる
→ 引数・戻り値の型に応じて適切なメソッドの呼び出しが可能
→ 呼び出し時のチェック・メソッド内部での条件分岐を減らせる
→ 可読性・保守性が向上する
【メリット】
・メソッドの煩雑化防止
・似て非なるメソッドの大量記述の防止
【デメリット】
・増えすぎると機能を理解しづらいメソッドを生む可能性あり
”オーバーロードの本質は
『引数や戻り値、個々の振る舞いは異なるが、振る舞いの本質は同様』の場合のメソッドかコンストラクタに対して適用するべきであり、
『引数の型が異なるだけで振る舞いは同様』の場合のメソッドをオーバーロードしても混乱のもととなりやすい。”
だそう。ちょっと難しい。自分なりの言葉で言い直すとしたら、
『振る舞いは同じだけど引数の型が違う』メソッドを沢山作るのは混乱を招くもとだから好ましくない。『引数、戻り値、呼び出し後の振る舞いは全然違うけど本質は同じ』という場合に使用するとよい。対象はメソッドやコンストラクタ。コンストラクタは、インスタンス化の時に生成・実行されるメソッドのこと。
かな。認識ミスがありましたらご指摘ください。
実際にコーディングに入った周りの人やさらにその周りの人の声を聞く限り(残念なことに私はまだ入れていないし予定もない)、概念的・業務内容的どちらにおいても『型』を見極めることが難しいのだそうだ。これは実践・経験あるのみなのかなと今は思っている。
オーバーライドについてはまだ調べられていないので、ここか別のところで別途書き残せればと思います。