Wie wird eine überladene Methode ausgewählt, wenn ein Parameter der Literal-Null-Wert ist?
Ich bin auf diese Frage in einem Quiz gestoßen,
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);
}
}
Die Ausgabe dieses Programms ist "String Version". Aber ich konnte nicht verstehen, warum die Übergabe einer Null an eine überladene Methode die String-Version auswählte. Ist null eine String-Variable, die auf nichts zeigt?
Wenn jedoch der Code geändert wird,
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);
}
}
Es wird ein Kompilierungsfehler ausgegeben, der besagt, dass die Methode method (StringBuffer) für den Typ MoneyCalc nicht eindeutig ist.