Menu
Coddy logo textTech

Che cos'è il polimorfismo?

Fa parte della sezione Programmazione orientata agli oggetti del percorso JavaScript di Coddy. Lezione 35 di 56.

Il polimorfismo è un principio fondamentale della programmazione orientata agli oggetti che consente agli oggetti di classi diverse di rispondere allo stesso metodo in modi diversi.

In JavaScript, il polimorfismo si osserva più comunemente quando le classi figlie sovrascrivono i metodi delle classi genitrici.

Creiamo una semplice classe genitore con un metodo speak():

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

Ora creiamo una classe figlia che estende Animal:

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

Ecco un'altra classe figlia:

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

Ogni classe figlia implementa il metodo speak() in modo diverso. Questa è la polimorfia in azione!

Ora possiamo creare oggetti diversi e chiamare lo stesso metodo su ciascuno:

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

console.log(animal.speak()); // Some animal emette un suono
console.log(dog.speak());    // Rex abbaia
console.log(cat.speak());    // Whiskers miagola

Tutti e tre gli oggetti rispondono al metodo speak(), ma ciascuno lo fa a modo proprio.

challenge icon

Sfida

Hai un sistema di notifiche con una classe genitore Notification e due classi figlie. Il tuo compito è aggiungere il metodo send(message) a ciascuna classe figlia, con implementazioni diverse.

  1. Nella classe EmailNotification, il metodo dovrebbe restituire la stringa: "Sending '(message)' via Email"
  2. Nella classe SMSNotification, il metodo dovrebbe restituire la stringa: "Sending '(message)' via SMS"

Provalo tu

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

// Codice di test - non modificare
const email = new EmailNotification();
const sms = new SMSNotification();

console.log(email.send("Hello!"));  // Dovrebbe usare send() di EmailNotification
console.log(sms.send("Hello!"));    // Dovrebbe usare send() di SMSNotification
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore JavaScript online