読者です 読者をやめる 読者になる 読者になる

オーバーロードしてるメソッド間での引数が継承関係にあったらどっちのメソッドが呼ばれるんですかね!!!

Java
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