Ho il seguente codice:
Qual è la spiegazione di questo codice java?
public class Main {
public void method(Object o)
{
System.out.println("Object Version");
}
public void method(String s)
{
System.out.println("String Version");
}
public static void main(String args[])
{
Main question = new Main();
question.method(null);//1
}
}
Perché il risultato è "String Versione"? e perché c'è un errore del compilatore se il primo metodo accetta un oggetto StringBuffer
?
Un altro caso: se il primo metodo prende un oggetto StringBuffer
e scrivo question.method("word");
il risultato sarà "Versione stringa". Perché ? perché non c'è nessun errore del compilatore?
Curioso. Mi sarei aspettato un compilatore brontolare lì, ma forse il fatto che ci sia una relazione di tipo tra le due classi di argomenti ('String' è il più specifico) cambia le cose e questo è un caso nel JLS? Il caso 'StringBuffer' è facile, dato che è decisamente ambiguo. –
@third question: Ovviamente non avrai un errore. Stai passando una stringa, quindi sarà ovviamente invocato il metodo con il parametro String. Non c'è nulla da cui il compilatore possa confondersi. – someguy