Dúvidas Interface/ArrayList

4 respostas
thundercas

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á!!!

4 Respostas

Ironlynx

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:

ViniGodoy
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

}

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

List<Carro> carros = new ArrayList<Carro>();
carros.add(c); //Ok
carros.add(b); //Class cast exception! Ônibus não é carro!
Ou mesmo, uma lista de veículos:
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.

thundercas

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…

R

… tinha falado besteira :oops:

Criado 14 de novembro de 2007
Ultima resposta 16 de nov. de 2007
Respostas 4
Participantes 4