W jaki sposób wybrano metodę przeciążoną, gdy parametr jest literalną wartością zerową?
Natknąłem się na to pytanie w quizie,
public class MoneyCalc {
public void method(Object o) {
System.out.println("Object Verion");
}
public void method(String s) {
System.out.println("String Version");
}
public static void main(String args[]) {
MoneyCalc question = new MoneyCalc();
question.method(null);
}
}
Rezultatem tego programu jest „String Version”. Ale nie byłem w stanie zrozumieć, dlaczego przekazanie wartości null do metody przeciążonej wybrało wersję napisu. Czy null zmienna String wskazuje na nic?
Jednak po zmianie kodu na,
public class MoneyCalc {
public void method(StringBuffer sb) {
System.out.println("StringBuffer Verion");
}
public void method(String s) {
System.out.println("String Version");
}
public static void main(String args[]) {
MoneyCalc question = new MoneyCalc();
question.method(null);
}
}
daje błąd kompilacji, mówiąc: „Metoda metody (StringBuffer) jest niejednoznaczna dla typu MoneyCalc”