Dúvidas Interface/ArrayList

Belea galera?? To com a seguinte dúvida: Criei a classe Veiculos, e as subclasses Carros, Motos e Caminhoes. Tenho que guardar cada 1 dos subVeículos em uma List diferente, correto??? Para identificar se é um Carro, Moto ou Caminhao, foi incluída a variável int TIPO. Aih que vem a dúvida, devo controlar a List dentro da classe Principal ou dentro da classe Veículo?? Creio que seja na classe Principal, mas daí, toda vez que incluir um novo veículo terei que realizar a consistência do TIPO???

Agradeço desde já!!!

Vc pode gravar cada Veiculo em uma list diferente(ainda mais com Generics que vc pode parametrizar seus tipos<?>)
Sim, na classe Principal, ao mesos que vc queira que os Demais Veículos saibam demais um sobre os outros.Não entendi o que vc chama de "consistência de Tipo".É só verificar, e se der muito no saco, use Enum e seja feliz! :smiley:

  1. Você não precisa da variável tipo. Você pode testar o tipo de qualquer classe com o operador instanceof:
Carro c = new Carro();
Onibus b = new Onibus();

if (c instanceof Carro) { //Retorna true
  //Faz alguma coisa
}

if (b instanceof Veiculo) { //Também retorna true, todo ônibus é um veículo

}

if (c instanceof Onibus) { //Retorna false, carro não é ônibus

}[/code]


Você também pode criar um list que só aceite carros:

[code]List<Carro> carros = new ArrayList<Carro>();
carros.add(c); //Ok
carros.add(b); //Class cast exception! Ônibus não é carro![/code]

Ou mesmo, uma lista de veículos:
[code]List<Veiculo> veiculos = new ArrayList<Veiculos>();
veiculos.add(c); //Ok
veiculos.add(b); //OK! Ônibus também é veículo!

Mesmo na lista de veículos, o instanceof ainda funciona. Ele testa a instância real.

if (veiculos.get(0) instanceof Carro) //Também retorna true, o primeiro veículo é um carro. { }

Tomara que isso já te dê idéias e te ajude.

Então, até entendi o que vocês disseram, mas para isso meu método “Adiciona” deverá estar descrito na classe Principal, não é?? Isso não vai contra as regras de encapsulamento??? É nisso que estou me confundindo…

… tinha falado besteira :oops: