ldsant:
Eae David, tudo bem?
Bom foi mau usar o termo "instanciar polimorficamente", me referia à instanciar um ArrayList poliformicamente, mas enfim...
vlw pela resposta. :D
Olá, seja bem vindo!
Ainda assim vou insistir, não existe "instanciar um ArrayList polimorficamente".
Polimorfismo é a execução de um método dependendo da implementação, ou seja, cada classe que implementa um método herdado vai executar aquele método de uma forma específica. A execução depende do objeto instanciado e não do tipo referência. Da referênca a obrigatoriedade é o nome e a assinatura do método.
Exemplo. Tanto ArrayList quanto LinkedList implementam a interface List, sendo assim, precisam, obrigatoriamente, implementar o método add.
A classe ArrayList faz o "add" de uma forma, enquanto LinkedList provavelmente faz de outra forma. O que importa é que o método funciona, ou seja, adiciona um item na lista. Então, se você tem uma variável do tipo List vc pode atribuir a ela um ArrayList ou uma LinkedList (pense novamente no método) e ter certeza que ao invocar add (que vem de List) o objeto real que está sendo referenciado vai fazer o serviço.
Exemplo:
public static void main( String[] args ) {
List<String> a = new ArrayList<String>();
List<String> b = new LinkedList<String>();
ArrayList<String> c = new ArrayList<String>();
// ok, a é do tipo List (mas o objeto é do tipo ArrayList)
adicionaNaLista( a, "um" );
// ok, b é do tipo List (mas o objeto é do tipo LinkedList)
adicionaNaLista( b, "dois" );
// ok, c é do tipo ArrayList e funciona pois um ArrayList É UM List
adicionaNaLista( c, "três" );
}
public static void adicionaNaLista( List lista, String valor ) {
lista.add( valor ); // chamada polimórfica aqui!
}
[]'s