Problemas com passagem de Objeto como parâmetro

Galera, desculpe encher novamente hehehe, mas me deparei com a seguinte dúvidas (Creio ser simples para quem tem alto conhecimento).

Tenho a SuperClasse Veículos e as SubClasses Carro, Moto e Caminhao. To tentando implementar o método adiciona(), o qual deve realizar algumas operações, podendo mover para o List uma instância da classe Carro, Moto ou Caminhao, conforme opção do usuário. Bom, até aih moleza… A questão é que tenho que passar como parâmetro para a classe Veículos a List e os objetos veiculo, carro, moto e caminhao. Só que o programa não aceita, dando erro no Cast

Alguém faz idéia do que possa ser?? Segue abaixo os principais trechos de meu código:

Principal

Veiculo veiculo = new Veiculo();
Veiculo carro = new Carro();
Veiculo moto = new Moto();
Veiculo caminhao = new Caminhao();
List listaVeiculo = new ArrayList();

veiculo.adiciona(listaVeiculo, veiculo, carro, moto, caminhao);

Veículos

[code]
public void adiciona (List lista, Veiculo veiculo, Veiculo carro, Veiculo moto, Veiculo caminhao){

//…

String pergunta = JOptionPane.showInputDialog(“Informe o veículo que deseja adicionar, sendo:\n\n1) Carro\n2) Moto\n3) Caminhao”);
switch (Integer.parseInt(pergunta)) {
case 1:
carro = (Carro) veiculo;
lista.add(carro);
JOptionPane.showMessageDialog(null, “A carro " + carro.getPlaca() + " foi adicionada com sucesso!”);

[code]

Supondo que a opção escolhida seja 1, ele dá erro de Cast, mas não entendo porquê!!!

Obrigado desde já!!

O seu cast quer dizer:

Esse veículo é um carro.

E o java reclama: “Ei, esse veículo é um Veículo, e nem todo veículo é um carro!”

Se sua lista é de veículos, você pode colocar qualquer veículo nela (carro, moto, ou caminhão), sem necessidade de cast.

listaVeiculo.add(carro); //ok listaVeiculo.add(moto); //ok listaVeiculo.add(caminhao); //ok

Entretanto, na hora de retirar o veículo da lista, é que pode ser que precise do cast, para saber que tipo de veículo específico está tirando.

Veiculo v = listaVeiculo.get(0);

if (v instanceof Carro) {//O veículo que eu tirei da lista, era um carro?
     Carro c = (Carro) v;
     //Faz alguma coisa
}
else if (v instanceof Moto) { //O veículo que eu tirei da lista, era um carro?
     Moto m = (Moto) v;
     //Faz alguma outra coisa
}

Lembre-se. Todo carro é um veículo, mas nem todo veículo é um carro. Por isso um cast de veiculo para carro nem sempre é possível.

Caraca, mato a pau veio, foi só tirar o Cast que funcionou!!! Muito obrigado e abraços!!!