tengo el siguiente código:
¿Cuál es la explicación de este código 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
}
}
¿Por qué el resultado es "Versión Cadena"? y ¿por qué hay un error de compilación si el primer método toma un objeto StringBuffer
?
Otro caso: si el primer método toma un objeto StringBuffer
y escribo question.method("word");
, el resultado será "Versión de cadena". Por qué ? ¿Por qué no hay error de compilación?
Curioso. Me hubiera esperado un compilador no se quejan, pero tal vez el hecho de que hay una relación de tipo entre las dos clases de argumentos ('string' siendo la más específica) cambia las cosas y este es un caso en el JLS? El caso de 'StringBuffer' es fácil, ya que definitivamente es ambiguo. –
@tercera pregunta: por supuesto que no obtendrá un error. Estás pasando un String, por lo que obviamente se invocará el método con el parámetro String. No hay nada para que el compilador se confunda. – someguy