¿Qué es el polymorphism paramétrico en Java (con ejemplo)?

Tengo entendido que el polymorphism paramétrico es una técnica que permite acciones uniformes sobre una variedad de datos (tipos). ¿Mi conocimiento es correcto?

¿Es este ejemplo el polymorphism paramétrico? Creo que es así porque Animal.talk permite que se llame a la conversación a pesar del tipo de animal específico (Gato o Perro).

public interface Animal { public String talk(); } public class Cat implements Animal { public String talk() { return "Cat says Meow!"; } } public class Dog implements Animal { public String talk() { return "Dog says Woof! Woof!"; } } import java.util.*; public class PolymorphismExample { public static void main(String[] args) { Collection animals = new ArrayList(); animals.add(new Cat()); animals.add(new Dog()); for (Animal a : animals) { System.out.println(a.talk()); } } } 

Saludos.

edición: si mi ejemplo no muestra específicamente un polymorphism paramétrico, ¿podría proporcionar uno? gracias.

“Polimorfismo paramétrico” es solo otro término para “Genéricos” en Java. La idea es simple: indica qué tipos utilizará una clase en particular, un claro ejemplo de esto está presente en todas las colecciones del paquete java.util .

Para aprender todos los matices de los generics en Java, recomiendo las preguntas frecuentes de Angelika Langer, que explora cada rincón de la especificación.

En su código, esta línea es un ejemplo de uso de generics:

 Collection animals = new ArrayList(); 

Se especifica una colección para contener cualquier objeto que sea un animal.

Wikipedia:

En los lenguajes de progtwigción y la teoría de tipos, el polymorphism paramétrico es una forma de hacer que un lenguaje sea más expresivo, mientras se mantiene la seguridad de tipos estática. Usando el polymorphism paramétrico, una función o un tipo de datos se pueden escribir de manera genérica para que pueda manejar valores de manera idéntica sin depender de su tipo. Dichas funciones y tipos de datos se denominan funciones genéricas y tipos de datos generics, respectivamente, y forman la base de la progtwigción genérica.

Así que un gran ejemplo son las colecciones de bibliotecas estándar de Java.

Por ejemplo, Collections.sort se declara como:

 public static > void sort(List list) 

Puede tomar una lista de objetos de tipo T que sea comparable a otros T y ordenar la lista, sin preocuparse por qué tipo T es realmente.

Es diferente del subtipo de polymorphism: el subtipo de polymorphism se ejemplifica por el hecho de que sort puede tomar cualquier tipo de List : una List ArrayList , una lista de LinkedList , etc.

Precisamente. El polymorphism paramétrico generalmente se refiere a generics / plantillas.

De wikipedia:

Usando el polymorphism paramétrico, una función o un tipo de datos se pueden escribir de manera genérica para que pueda manejar valores de manera idéntica sin depender de su tipo.