[quote=devaney]N pessoal… Ou eu n soube explicar ou eu n entendi oq vcs me explicaram.
Esquece se é pessoa ou n.
Eu ja tentei ler outros artigos mas tem essa duvida q n me deixa dormir. :?:
Vamos fazer assim:
List minhaLista = new ArrayList();
Eu n vou conseguir acessar alguns metodos da ArrayList, por exemplo o removeRange().
minhaLista.removeRange();
Esse codigo nao funciona.
Q sentido tem eu criar um objeto ArrayList se eu n posso acessar os metodos do ArrayList?
So para ganhar polimorfismo?
Espero ter conseguido explicar a minha duvida.[/quote]
Cara não é difícil… é trabalhoso e é um Processo bastante pessoal… Kda um entende da sua maneira. Eu entendi o acontecimento, depois entendi como usar. Então vamos lá, tomara que eu consiga lhe passar alguma coisa.
Primeiro, List é uma interface. Interfaces definem um contrato específico que toda e qualquer classe que a implementar, deve respeitar esse contrato. Logo quando você faz assim:
public interface Automovel {
void montar(List<PecaDeAutomovel> pecas);
}
public interface PecaDeAutomovel {
String localizacaoPeca();
}
Você está dizendo que toda e qualquer classe que quiser ser um automóvel ou uma peça de automóvel, deve no mínimo implementar os métodos montar() de automóvel e localizacaoPeca() de Peça de automóvel.
Aí vamos agora criar uma classe de Peça, afinal vamos começar a montar o nosso automóvel…
public class Volante implements PecaDeAutomovel {
private String cor;
private String localizacao;
public String localizacaoPeca(){
return localizacao;
}
// gets e sets
}
public class Carro implements Automovel {
public void montar(List<PecaDeAutomovel> pecas) {
for(PecaDeAutomovel peca : pecas){
System.out.println("Colocar peça no carro em " peca.localizacaoPeca());
}
}
}
public class Main {
public static void main(String []args) {
List<PecaDeAutomovel> pecas = new ArrayList<PecaDeAutomovel>();
PecaDeAutomovel volante = new Volante();
pecas.add(volante);
Automovel carro = new Carro();
carro.montar(pecas);
}
}
BOM… não sei se ajudei ou confundi, mas vamos aos pormenores do que ocorreu…
na classe Main, eu criei uma PecaDeAutomovel volante; no lugar de um Volante volante;
sei que não pus outros métodos em Volante além do próprio que já havia na Interface, mas se houvessem os mesmos não poderiam ser acessados pela referência volante, afinal volante embora receba um Objeto Volante (new Volante()) ele é do tipo PecaDeAutomovel e em PecaDeAutomovel só existe o método localizacaoPeca()… “Porque isso Adriano ??? Se for assim eu preferia ter criado um Volante volante = new Volante(); Afinal poderia desfrutar de todos os métodos de Volante”
Mas aí, lá no método montar, você teria que receber Vários parâmetros de tipos diferentes, seu método montar ficaria assim
void montar(Volante volante, List<Pneu> pneus, Marcha marcha, List<Banco> bancos, etc...) {...}
Percebeu o trabalho qu você economizou ??? Ao adicionar uma nova peça, basta você criar ela com o tipo da Interface PecaDeAutomovel e adicionar ela na Lista que o método montar, vai reconhecer sua peça de automóvel automaticamente e você não precisa ir no método montar e adicionar mais uma peça na lista de parâmetros, o que a longo prazo, poderia deixar seu Sistema com a manutenção horrível, pois a cada nova peça você teria que ir em todas as classes que chamam montar e adicionar a nova peça… Enfim… essa é uma das vantagens, torça para alguém com saco pra explicar dizer aqui uma outra vantagem… Espero que possa ajudar nos seus estudos… se não entendeu, grita aí pra eu tantar ser mais claro…
PS: Escreví com pressa e não testei os códigos… Perdoem-me qualquer falha…
Abs[] e bopns estudos…