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 !
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);
}
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<E> {
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<String> listaString = new Lista<String>();
Lista<Integer> listaInteira = new Lista<Integer>();
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