Questão Certificação - POLIMORFISMO

5 respostas
Gustavo_Santos

Pessoal está rolando uma discrepância aqui e não sei o motivo.

Quando chamo o método t.turon(5) passando-lhe um valor int, ele chama o método turon de Turon, como se tivesse sobrescrito !
Quando faço um cast para um byte e o chamo assim : t.turon((byte)5); ele chama o método turon de Applicance. Então não sobrescrevel !
Segundo as regras de Polimorfismo, se não tiver o mesmo tipo de retorno ou compativel, e mesma
lista de parâmetros não é um override válido. Porque então quando chamo o metodo t.turon(5); ele me retorna esse saída: "Versão Turon "

public class Applicance {
	public void turon(byte a) {
		System.out.println("Versão Applicance");
	}
}

public class Turon extends Applicance {
	public void turon(int a) {
		System.out.println("Versão Turon");
	}
}

public class TestDriveAppliance {
	public static void main(String[] args) {
		Turon t = new Turon();
		t.turon((byte)5); // Com essa chamada a versão chamada será a de Applicance - 
		t.turon(5); //Com essa chamada a versão chamada será a de Turon -
	}
}

5 Respostas

E

5 é um int, não um byte. Para que 5 seja um byte, você precisa usar (byte) 5, conforme você mesmo já fez.

O método public void turon(int a) não é um override de public void turon(byte a) (porque os tipos dos parâmetros são distintos) e sim um overload.

Gustavo_Santos

Então o que está acontecendo é uma simples chamada de método ?!

E

Como assim uma simples chamada de método? Um método é sempre chamado, havendo ou não override ou overload.

Override - quando você muda a definição de um método em uma subclasse. Por exemplo, Object.toString() e Integer.toString().
Overload - quando você cria um método com mesmo nome mas parãmetros diferentes (“assinatura diferente”). Por exemplo, PrintWriter.println() e PrintWriter.println (String).

No seu caso, há um overload: public void turon (int) e public void turon (byte). U

Gustavo_Santos

O que quero dizer é que:

Passando-lhe um valor int, então meu método não está sendo sobrescrito, o que está acontecendo é um overload ?!

Minha dúvida é essa pois a saída é " Versão Turon ", e para mim parece que ele foi sobrescrito !!! Pois a saída foi mudada!

Entendeu ?!

Xo ver se entendi, não houve overrid, o que aconteceu foi um overload. E como o parâmetro foi int, a JVM chamou o método de Turon ?!

è isso ?!

Gustavo_Santos

Ok pessoal !

Consegui entender o que aconteceu aqui !!!

Criado 23 de junho de 2010
Ultima resposta 23 de jun. de 2010
Respostas 5
Participantes 2