Exemplo de implementação de polimorfismo paramétrico

Andei pesquisando sobre polimorfismo paramétrico, porém encontro muita explicação é nenhum código, o único código que encontrei dizia que quando se declara uma List, é um exemplo de polimorfismo paramétrico.

Porém não mostra a implementação, se alguem puder me ajudar com algum exemplo eu agradeço !

Obrigado pela atenção !

O polimorfismo paramétrico representa a possibilidade de definir várias funções do mesmo nome mas possuindo parâmetros diferentes (em número e/ou tipo). O polimorfismo paramétrico torna assim possível a escolha automática do bom método a adoptar em função do tipo de dado passado em parâmetro.

Assim, pode-se por exemplo definir vários métodos homónimos adição () efectuando uma soma de valores.

[quote]O método int addition (int, int) poderá dar a soma de duas totalidades
O método float addition (float, float) poderá dar a soma de dois flutuantes
O método char addition (char, char) poderá definir à vontade do autor a soma de dois caracteres
etc.[/quote]

Chama-se assinatura ao número e tipo (estático) dos argumentos de uma função. É por conseguinte a assinatura de um método que determina qual será chamado.

::::Resumindo:::::

É a mesma coisa de sobrecarga ou overloading


class documento
{
      void imprime();
      void imprime(String texto);
}

Por favor, não banalize o uso das tags postando coisas óbvias como [AJUDA] ou [Dúvida]. Deixe as tags para coisas importantes como [Resolvido].

Confesso que não entendi muito bem a resposta do Jhonatan1090, então se estiver falando a mesma coisa, me desculpe.

Acredito que o polimorfismo paramétrico seja o que a gente conhece no Java como Generics.

No seu caso, a classe List fornece este tipo de polimorfismo.
Ela pode ser aplicada a qualquer tipo de dados, que passamos como parâmetro na declaração/instaciação da lista.

Ou seja, List fornece um conjunto comum de operações para qualquer tipo de dados.
(Aí está o polimorfismo)

Entendo AbelBueno, mas eu gostaria de saber em código, por exemplo, como faço para criar uma classe que receba esse tipo de parâmetro. Como é o caso de List<>.

[quote=renan_fagc]Entendo AbelBueno, mas eu gostaria de saber em código, por exemplo, como faço para criar uma classe que receba esse tipo de parâmetro. Como é o caso de List<>.

[/quote]

Ah sim, era sua pergunta inicial…

Recomendo você estudar o Generics do java…

Para dar um exemplo, pense numa classe Lista (seria uma versão simplificada da List do java), ficaria algo assim:

class Lista&lt;E&gt; {
  public void add(E elemento) { // }
  public E get(int index) { // }
}

Repare que o E será substituído pelo tipo específico que usar com a classe, um Integer, uma String…

O uso seria:

Lista&lt;String&gt; listaString = new Lista&lt;String&gt;();
Lista&lt;Integer&gt; listaInteira = new Lista&lt;Integer&gt;();

E dentro da classe Lista eu consigo criar uma propriedade utilizando o E?

exemplo:

E[] elements;

Nesse caso o Lista espera um tipo genérico.
E[] seria um array desse tipo, e não seria recebido como parâmetro da classe.

Mas no caso do List, como ele armazena, no fim tem que ser um vetor E[] não tem ?

Cara foi mal, desculpa! Troquei as bolas esse ai é outro polimorfismo (sobrecarga)

rsrs agora sim…

No wikipedia cita tres tipos de polimorfismo
Existem três tipos de polimorfismo que a linguagem pode ter (atente para o fato de que nem toda linguagem orientada a objeto tem implementado todos os tipos de polimorfismo):

Universal:
Inclusão: um ponteiro para classe mãe pode apontar para uma instância de uma classe filha (exemplo em Java: “List lista = new LinkedList();” (tipo de polimorfismo mais básico que existe).
Paramétrico: se restringe ao uso de templates (C++, por exemplo) e generics (Java).
Ad-Hoc:
Sobrecarga: duas funções/métodos com o mesmo nome mas assinaturas diferentes.

o primeiro é o uso de classe abstrata em java 	
o segundo pode ser usado o Generics do java 	
e o terceiro é chamado de sobrecarga de operações(métodos) 	
o primeiro tb cai no caso de classe mãe/classe filha 

o paramétrico é o generics do java 	
a classe define um parâmetro generico 	
que pode assumir multilas formas 	
ja te passo um exemplo 

	package poli;

public class Par<T>
{
      T mPrimeiro;
      T mSegundo;

         public Par(T pPrim, T pSeg)
         {
                 setPrimeiro(pPrim);
                 setSegundo(pSeg);
         }

         public T getPrimeiro()
         {
                 return mPrimeiro;
         }

         public void setPrimeiro(T pPrimeiro)
         {
                 mPrimeiro = pPrimeiro;
         }

         public T getSegundo()
         {
                 return mSegundo;
         }

         public void setSegundo(T pSegundo)
         {
                 mSegundo = pSegundo;
         } 

}
 	
	//exemplo de uso 
	//package poli;

public class Teste
{
        public static void main(String[] args)
       {
              Par<String> tPar = new Par<String>("Ana", "José");

              System.out.println(tPar.getPrimeiro()); 
              System.out.println(tPar.getSegundo());
        }

}

ja referente o pq ArrayList é um exemplo é o seguinte:

pq todo o framework de coleções do java, a partir do java 5.0 usa GENERICS
por isso
e nao pq é arraylist
e sim pq usa generics

bom espero ter ajudado!!!