public class TestConstrutor
{
public TestConstrutor()
{
System.out.println("padrao");
}
public TestConstrutor(Object o)
{
System.out.println("padrao 3");
}
public TestConstrutor(String t)
{
System.out.println("padrao 2");
}
/**
* @param args
*/
public static void main( String[] args )
{
new TestConstrutor(null);
}
}
Bom… como nosso amigo falou, a JVM procura chamar o método mais apropriado a chamada…
Por exemplo…
Se vc tivesse feito:
ele chamaria:
seria
e para
viria
Agora, para essa chamda:
Ele tentaria encontrar o a melhor situação…
que pra ele eh a chamada do método que recebe uma String como padrão…
Chamar o método que não recebe parâmetros ?? Acredito que não, porque vc esta passando um parâmetro… mesmo que ele seja um null (explícito)
Bom, se formos analisar, ele não chamaria o Object, porque null não eh um objeto e sim um valor… apesar de um valor nulo…
Chamar o método que recebe uma String parece ser o mais coerente… pois podemos comparar String’s com valores nulos… o que no meu ver não eh o mesmo com objetos… pois não vemos se uma variável objeto esta valendo null… e sim se ela esta apontando para null… tem uma diferença ai…
Ou a JVM não pensaou em nada disso e foi fazendo um
if… else if… else…
e como o método om String eh o último, acabou sendo ele… :lol:
Fui !