Qual o motivo disto "fazer uso do polimorfismo"?

2 respostas
R

Estava resolvendo uma questão do testKiller. A pergunta é quais trechos da classe C fazem uso do polimorfismo. A resposta é estas 3 que eu coloquei ai.
Eu não entendi pq o método recebe umaa referencia para um objeto do tipo b e chama seu método nele. O que isso tem de polimorfismo? Apesar de estar dentro da classe C, não tem nenhum objeto c nem referencia ai no meio.

package test;

public interface A {
	public int getValue();
}


package test;

public class B implements A{
	
	public int getValue()
	{
		
	return 1;	
	}
	
}


package test;

public class C extends B {

	public void add(B b)
	{
		b.getValue();
	}
	
	public void add(A a)
	{
		a.getValue();
	}
	
	public void add(A a, B b)
	{
		a.getValue();
	}
}

2 Respostas

B

Um objeto de uma classe é compativel com (pode ser atribuído à) um objeto de sua superclasse. Dizemos que a classe derivada é um subtipo de sua superclasse.

Por exemplo:

Object str = "String";    // Válido, pois uma String é um Object.

Essa é a essência do polimorfismo.

Algo similar se aplica às interfaces. Podemos usar o nome da interface para nos referir à todas as classes que a implementam. Por exemplo, a interface List, do Java Collections Framework:

List<Object> lista = new ArrayList<Object>(); List<String> lista2 = new Vector<String>();

As duas linhas estão corretas, pois as ArrayList e Vector implementam a interface List.

W

Nesse código que você postou ai, faltou algum trecho do tipo :

C instanciaDeC = new C();
B instanciaDeB = new B();
A instanciaDeB2 = new B();

instanciaDeC.add(instanciaDeC);
instanciaDeC.add(instanciaDeB);
instanciaDeC.add(instanciaDeB2);

para podermos dizer que Polimórficamente uma referência/instancia de C pode ser passada para o add(X x), mesmo que não tenha um add(C c), pois C é um B e B é um A, logo C é um A também e pode cair em qualquer um dos três adds(mas vai cair no add(B b) por widening).

Aproveito para perguntar a alguém que leia este tópico : O que ocorre neste caso, é de um C cair no método que recebe um B, mas porque não cai no que recebe um A? Lei do menor esforço? Primeira ocorrência de hierarquia?

Criado 11 de março de 2010
Ultima resposta 11 de mar. de 2010
Respostas 2
Participantes 3