null を渡したときのオーバーロード
出力はどれか。
public class Main {
static void p(Object o) { System.out.println("Object"); }
static void p(String s) { System.out.println("String"); }
public static void main(String[] args) {
p(null);
}
}
- A
String - B
Object - C コンパイルエラーになる
- D 実行時に例外が発生する
正解と解説を見る
正解: A
- A: null はどちらにも渡せますが、より具体的な型 (String) が選ばれます。
- B: String は Object のサブクラスなので、String の方がより具体的で優先されます。
- C: 親子関係がある型なので、あいまいにはならずコンパイルできます。
- D: null を渡してもメソッドを呼ぶだけなので、例外にはなりません。
ポイント
- null はどちらにも渡せます。候補が複数あるときは、より具体的な型 (String) が選ばれます。