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 miauczyWszystkie trzy obiekty reagują na metodę speak(), ale każdy robi to na swój sposób.
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.
- W klasie
EmailNotificationmetoda powinna zwracać ciąg: "Sending '(message)' via Email" - W klasie
SMSNotificationmetoda 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 SMSNotificationTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Obiekty i słowo kluczowe this
Szybka powtórka: obiektyDodawanie metod do obiektówZrozumienie słowa kluczowego thisFunkcje konstruktoraSłowo kluczowe newWyzwanie podsumowujące7Dziedziczenie i słowo kluczowe extends
DziedziczenieRelacja „jest rodzajem”Słowo kluczowe extendsMetoda super()Dziedziczenie właściwości i metodWyzwanie podsumowujące10Polimorfizm
Czym jest polimorfizm?Nadpisywanie odziedziczonych metodUżywanie superWyzwanie podsumowujące13Kompozycja a dziedziczenie
Relacja „ma” a relacja „jest”Ograniczenia głębokiego dziedziczeniaTworzenie obiektów2Organizowanie kodu
Czym są moduły?Eksportowanie za pomocą exportImportowanie za pomocą importEksporty domyślne a nazwane5Enkapsulacja i dostęp
EnkapsulacjaPubliczne i prywatne pola klasyMetody prywatneWyzwanie podsumowujące8Organizowanie kodu OOP
Organizowanie klas w moduły11Projekt: Renderer kształtów
Konfiguracja: klasa Shape i eksportDziedziczenie klasy CircleNadpisywanie i metoda obliczania polaStatyczny licznik kształtów14System zarządzania biblioteką
Projektowanie bibliotekiKlasa Book z kompozycjąWalidacja autora książki9Metody i właściwości statyczne
Poziom klasy a poziom instancjiWłaściwości statyczneStatyczne metody pomocniczeWyzwanie podsumowującePoćwicz samodzielnie: Kompilator JavaScript online