Menu
Coddy logo textTech

Czym jest polimorfizm?

Część sekcji Programowanie obiektowe ścieżki JavaScript w Coddy. Lekcja 35 z 56.

Polimorfizm to podstawowa zasada programowania obiektowego, która pozwala obiektom różnych klas reagować na tę samą metodę na różne sposoby.

W JavaScript polimorfizm najczęściej występuje wtedy, gdy klasy potomne nadpisują metody klas nadrzędnych.

Utwórzmy prostą klasę nadrzędną z metodą speak():

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

Teraz utwórzmy klasę potomną rozszerzającą klasę Animal:

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

Oto kolejna klasa potomna:

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

Każda klasa potomna implementuje metodę speak() inaczej. Oto polimorfizm w działaniu!

Możemy teraz tworzyć różne obiekty i wywoływać tę samą metodę dla każdego z nich:

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

console.log(animal.speak()); // Jakieś zwierzę wydaje dźwięk
console.log(dog.speak());    // Rex szczeka
console.log(cat.speak());    // Whiskers miauczy

Wszystkie trzy obiekty reagują na metodę speak(), ale każdy robi to na swój sposób.

challenge icon

Wyzwanie

Masz system powiadomień z klasą nadrzędną Notification i dwiema klasami potomnymi. Twoim zadaniem jest dodanie metody send(message) do każdej klasy potomnej, z różnymi implementacjami.

  1. W klasie EmailNotification metoda powinna zwracać ciąg: "Sending '(message)' via Email"
  2. W klasie SMSNotification metoda powinna zwracać ciąg: "Sending '(message)' via SMS"

Spróbuj swoich sił

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

// Kod testowy — nie modyfikuj
const email = new EmailNotification();
const sms = new SMSNotification();

console.log(email.send("Hello!"));  // Powinno używać metody send() klasy EmailNotification
console.log(sms.send("Hello!"));    // Powinno używać metody send() klasy SMSNotification
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator JavaScript online