Dziedziczenie pozwala tworzyć nową klasę (klasę pochodną) na bazie już istniejącej (klasy bazowej), przejmując jej pola i metody, i dodając lub modyfikując wybrane elementy. Unikamy w ten sposób powielania kodu.
Klasa pochodna może zdefiniować metodę o tej samej nazwie co w klasie bazowej, aby zmienić jej działanie — to nazywamy przesłanianiem (ang. overriding).
Polimorfizm oznacza, że obiekty różnych klas pochodzących z tej samej hierarchii mogą być traktowane jednolicie — wywołanie tej samej metody na różnych obiektach daje różne, właściwe dla każdej klasy, zachowanie.
Możemy napisać kod działający na ogólnym typie Pojazd, a program automatycznie wywoła właściwą wersję metody dla konkretnego obiektu — bez potrzeby pisania warunków if typ == "samochod".
Stwórz klasę bazową Zwierze z metodą wydaj_dzwiek() zwracającą "...", a następnie klasy pochodne Pies i Kot, które przesłaniają tę metodę odpowiednio na "Hau!" i "Miau!". Wypisz dźwięki wszystkich zwierząt z listy w pętli.
Zdefiniuj klasę UczenTechnikum(Uczen), która dziedziczy po klasie Uczen i dodaje pole kwalifikacja (np. "INF.03"). Użyj super().__init__() w konstruktorze.
1. Do czego służy słowo kluczowe super() w konstruktorze klasy pochodnej?
2. Jak nazywa się sytuacja, gdy klasa pochodna definiuje metodę o tej samej nazwie co klasa bazowa, zmieniając jej działanie?
3. Co umożliwia polimorfizm?