Dúvida polimorfismo

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

[code]
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
}[/code]

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).

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,