Dúvida polimorfismo

2 respostas
Marques

Colegas,

Na classe Class PedidoItem preciso definir um atributo que pode ser: Um Dvd ou um Eletrodomestico ou qualquer outro que herda de Produto com os seus respectivos atributos.

Se eu definir assim (por exemplo):
Produto p = new Dvd();
estarei fazendo um cast de Dvd para Produto, o que não é o que eu quero. Estou correto?
Quero que nesse atributo tenha um Dvd ou um Eletrodomestico.
Como fazer?

Muito obrigado,

Marques

public Class Produto {
		//Atributos do Produto
	}
	
	public Class Dvd extends Produto {
		//Atributos do Dvd
	}
	
	public Class Eletrodomestico extends Produto {
		//Atributos do Eletrodomestico
	}
	
	public Class PedidoItem {
		//Aqui eu quero criar um atributo que pode ser: Um Dvd ou um Eletrodomestico ou qualquer outro que herda de Produto
	}

2 Respostas

marcoslogan

Você pode criar vários métodos usando polimorfismo, tipo se for adicionar alguns métodos você pode assim:

public void adicionar(DVD dvd){}
    public void adicionar(Eletrodomestico eletro){}

Pronto, nesse exemplo eu não estou usando o cast, realmente fica muito feio, pq com o casting você está forçando uma situação. Desse jeito que estou lhe mostrando fica muito melhor.

Mas lembre-se com a herança o dvd é um produto (relação É-UM).
O Eletrodoméstico TAMBÉM É UM Produto (Relação É-UM).

henriqueluz

Oi!

É assim mesmo que você faz, defina um novo atributo que é uma referencia para um Produto e sempre que quiser um objeto de determinado tipo você o instancia como tal.
Caso queira usar métodos especificos de uma subclasse de produto você usa um cast explicito e assim poderá usar o método.
Ex:

Produto fogao = new Eletrodomestico();
//Faz várias coisas (...)

((Eletrodomestico)fogao).algumMetodoDaClasseEletroDomestico();

Abracos,

Criado 2 de agosto de 2011
Ultima resposta 3 de ago. de 2011
Respostas 2
Participantes 3