Principio de la POO que permite que un método se comporte diferente según el objeto que lo invoque.
Permite escribir código más flexible y extensible. "Muchas formas" - mismo nombre, diferente comportamiento.
// Polimorfismo con interfaces interface Forma { calcularArea(): number; } class Rectangulo implements Forma { constructor(private ancho: number, private alto: number) {} calcularArea(): number { return this.ancho * this.alto; } } class Circulo implements Forma { constructor(private radio: number) {} calcularArea(): number { return Math.PI * this.radio ** 2; } } class Triangulo implements Forma { constructor(private base: number, private altura: number) {} calcularArea(): number { return (this.base * this.altura) / 2; } } // Polimorfismo en acción function imprimirArea(forma: Forma): void { // No importa qué forma sea, tiene calcularArea() console.log(`Área: ${forma.calcularArea()}`); } const formas: Forma[] = [ new Rectangulo(5, 3), new Circulo(2), new Triangulo(4, 6) ]; formas.forEach(imprimirArea); // Área: 15 // Área: 12.566... // Área: 12