Chamar métodos no arraylist


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