overload
同名の関数を、引数や戻り地を異なる型で複数定義できる機能
引数の並び順もか
戻り値の型などもか
Javaでの例
Pが親、CはPを継承した子供
共にhoge()というメソッドを持っている
code:java
public void piyo(P p) {
System.out.print("Call P: ");
p.hoge();
}
public void piyo(C c) {
System.out.print("Call C: ");
c.hoge();
}
// pはP型なので、上のpiyoが呼び出される
P p = new P();
piyo(p); // Call P: Parent
// cはC型なので、下のpiyoが呼び出される
C c = new C();
piyo(c); // Call C: Child
// xはP型なので、上のpiyoが呼び出される
// しかし、Cの実体なのでp.hoge()の結果はOverrideされたものになる
P x = new C();
piyo(x); // Call P: Child
最後の例を見ても分かる通り、実体が子クラスのものであっても、型がPなら呼び出されるのはp.hogeの方になる
もし、親にはあって子にはないメソッドfooが呼び出されたときは、fooがCにあるか探したあとでPにあるか探しに行く
子→親の順で呼ばれるメソッドが探されている