Menu
Coddy logo textTech

¿Qué es el polimorfismo?

Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy — lección 35 de 56.

El polimorfismo es un principio fundamental de la programación orientada a objetos que permite que objetos de diferentes clases respondan al mismo método de diferentes maneras.

En JavaScript, el polimorfismo se ve más comúnmente cuando las clases hijas sobrescriben métodos de las clases padres.

Vamos a crear una clase padre simple con un método speak():

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    return `${this.name} makes a sound`;
  }
}

Ahora, vamos a crear una clase hija que extiende a Animal:

class Dog extends Animal {
  speak() {
    return `${this.name} barks`;
  }
}

Aquí tienes otra clase hija:

class Cat extends Animal {
  speak() {
    return `${this.name} meows`;
  }
}

Cada clase hija implementa el método speak() de manera diferente. ¡Esto es polimorfismo en acción!

Ahora podemos crear diferentes objetos y llamar al mismo método en cada uno:

const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");

console.log(animal.speak()); // Some animal hace un sonido
console.log(dog.speak());    // Rex ladra
console.log(cat.speak());    // Whiskers maúlla

Los tres objetos responden al método speak(), pero cada uno lo hace a su propia manera.

challenge icon

Desafío

Tienes un sistema de notificaciones con una clase padre Notification y dos clases hijas. Tu tarea es añadir el método send(message) a cada clase hija con diferentes implementaciones.

  1. En la clase EmailNotification, el método debe devolver el string: "Sending '(message)' via Email"
  2. En la clase SMSNotification, el método debe devolver el string: "Sending '(message)' via SMS"

Hoja de referencia

El polimorfismo permite que objetos de diferentes clases respondan al mismo método de diferentes maneras. En JavaScript, esto se logra comúnmente cuando las clases hijas sobrescriben métodos de las clases padres.

Crea una clase padre con un método:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    return `${this.name} makes a sound`;
  }
}

Las clases hijas pueden sobrescribir el método del padre con su propia implementación:

class Dog extends Animal {
  speak() {
    return `${this.name} barks`;
  }
}

class Cat extends Animal {
  speak() {
    return `${this.name} meows`;
  }
}

Cada objeto responde al mismo método de manera diferente:

const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");

console.log(animal.speak()); // Some animal makes a sound
console.log(dog.speak());    // Rex barks
console.log(cat.speak());    // Whiskers meows

Pruébalo tú mismo

import { EmailNotification } from './email-notification.js';
import { SMSNotification } from './sms-notification.js';

// Código de prueba - no modificar
const email = new EmailNotification();
const sms = new SMSNotification();

console.log(email.send("Hello!"));  // Debería usar el send() de EmailNotification
console.log(sms.send("Hello!"));    // Debería usar el send() de SMSNotification
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos