Ref null para métodos overload

Galera, beleza?

Estou com a seguinte dúvida . . .

:sad:

neste trecho de código:

<quote>
public class Test {

public void myMethod(Object o) {
	System.out.println("My Object");
}

public void myMethod(String s) {
	System.out.println("My String");
}

public static void main(String[] args) {
	Test t = new Test();
	t.myMethod(null);
}

}
</quote>

e a resposta será

My String

no caso abaixo com o seu código

<quote>
public class Test {

public void myMethod(String s) {
	System.out.println("My String");
}

public void myMethod(StringBuffer sb) {
	System.out.println("My StringBuffer");
}

public static void main(String[] args) {
	Test t = new Test();
	t.myMethod(null);
}

}
</quote>

gera erro em tempo de compilação…

8O

agora, queria saber o porquê…

realmente fiquei confuso com isso…

se alguém puder me ajudar!!!

donatinho

Quando você tem 1 metodo generico e um mais especifico, e chama passando null, ele sempre chama o metodo mais especifico, no caso o mais especifico é o que recebe String.

No segundo caso não há um metodo mais especifico e um mais generico, os dois são especificos, então não tem como a JVM saber qual chamar, por isso dá o erro de compilação…

valeu cara!!! :):):):):):):slight_smile:

String e StringBuffer são filhas de Object…
Estão no mesmo nível de especificidade, por isso gera erro…

Agora pegue por exemplo Integer que é filha de Number que é filha de Object…

Se você tiver um método que recebe Integer e outro Number, ele chamará Integer por ser mais específico que Number…

Deu para sacar? :cool: