オーバーロード

オーバーロードされたメソッドはキャストされている型で決定される。

なんで実行時にインスタンスの型に従ってメソッドが選ばれると勘違いしたのかわからないが。

ClsBとClsCはClsAのサブクラス
(1)

public class FFF
{
  public void hoge(ClsB a);
  public void hoge(ClsC a);
}


ClsA a = new ClsB();
(new FFF()).hoge(a);      ← コンパイルエラー

(2)

public class GGG
{
  public void hoge(ClsA a);
  public void hoge(ClsB a);
}


ClsA a = new ClsB();
(new GGG()).hoge(a);      ← hoge(ClsA a)が呼ばれる