public class OverloadTest { public static void method(Sexy sexy){ System.out.println("メソッドA"); } public static void method(SuperSexy superSexy){ System.out.println("メソッドB"); } public static void main(String[] args){ Sexy sexy = new Sexy(); method(sexy); //メソッドAがよばれる SuperSexy supersexy = new SuperSexy(); method(supersexy); //メソッドBがよばれる method(null); //メソッドAがよばれる(なんでだ) } } class Sexy extends SuperSexy{ } class SuperSexy { }
なんかより近い方?が呼ばれた。
メソッドAを消すと常にメソッドBが呼ばれるのがちょっときしょい感じ。
なんでこうなるのかよくわからん。
nullを渡した時の挙動についてはもうさっぱりわからん。
引数が継承関係にない場合はnullを渡すとコンパイルエラーになると。
参考:
Javaのメソッドで引数にnullを指定した場合のオーバーロードメソッドの解決 - NullPointer's Blog