Questão Sobrecarga

4 respostas
diego2005

Pessoal, tenho uma questão com o seguinte código:

public class Teste3
{
	public Teste3(Object voltage)
    {
    	System.out.println ("PowerSupply(Object) executed");
	}
	
	public Teste3(String voltage)
	{
		System.out.println ("PowerSupply(String) executed");
    }        
	
    public Teste3()
    {
    	System.out.println ("No argument constructor execute");
	}
	
    public static void main(String[] args) 
    {
    	Teste3 ps = new Teste3(null);
	}
}

Ai pergunta-se: qual é a saída??

Sei que a saída é: PowerSupply(String) executed

Mas por que?? Queria que alguém me desse uma explição por que a escolha desse construtor e não do que tem o Object como parâmetro.

4 Respostas

T

null é por definição um objeto que é uma “instância” (modo de dizer) de todas as classes.
Se vários protótipos de métodos (ou construtores - um construtor nada mais é que um método especial) podem ser usados, procura-se o que seja mais específico.
Como String é uma subclasse de Object, ou seja, é mais específica que Object, então (como null é uma String - lembre-se disso!) ele vai pegar Teste3 (String) e não Teste3 (Object).

diego2005

Valeu thingol, acho que entendi, é + - como na cláusula catch, onde temos que colocar as exceções mais restritivas primeiro, certo??

Obrigado pela explicação…

T

Não tinha pensado nisso, mas a analogia é perfeita para poder explicar. Na próxima vez, quando for explicar isso, vou lhe citar. Obrigado

diego2005

Que isso, eu que agradeço…

T+

Criado 3 de agosto de 2006
Ultima resposta 3 de ago. de 2006
Respostas 4
Participantes 2