Eu e um amigo estamos fazendo um código mas estamos com um problema. É possível criarmos os objetos de cada classe, porém quando os armazenamos no ArrayList deixamos de ter acesso aos métodos e atributos de suas classes, apenas temos acesso aos atributos da classes abstrata que dá o tipo do ArrayList que no nosso caso é Veiculo. Não dá para acessar os métodos da interface implementada e atributos originais das classes Carro e Onibus.
É só percorrer o arraylist. Exemplo:
for(Veiculo /*pode ser do tipo Carro ou Onibus*/ veiculo : veiculos) {
veiculo.metodoDaClasse();
}
Com Java 8:
veiculos.forEach(veiculo -> {
veiculo.metodoDaClasse()
});
1 curtida
Complementando o @lucas.sampaio , se você precisa dos métodos das classes derivadas, precisa fazer um cast quando pegar o valor do arraylist. Isso implica saber o tipo no índice que for pegar do arraylist. Algo como:
Carro carro = (Carro) veiculos.get(0); // faz cast de Veiculo para Carro.
carro.metodoPresenteEmCarro();
Se a posição desejada não for do tipo do cast (Carro, nesse exemplo), você terá um erro em tempo de execução.
Mini-exemplo: link
Abraço.
1 curtida