Dziedziczenie w C
1. Wprowadzenie
- Dziedziczenie to jeden z podstawowych filarów programowania obiektowego.
- Pozwala tworzyć nowe klasy na bazie istniejących, dziedzicząc ich funkcjonalność.
- Klasa bazowa (nadrzędna) – klasa, z której dziedziczymy.
- Klasa pochodna (podrzędna) – klasa, która dziedziczy z klasy bazowej.
- Dziedziczenie umożliwia:
- Ponowne wykorzystanie kodu (reusability),
- Rozszerzanie funkcjonalności istniejących klas,
- Tworzenie hierarchii klas.
2. Składnia dziedziczenia
Przykład:
Wynik:
Burek je.
Burek szczeka!
3. Dostęp do członków klasy bazowej
public– dostępne wszędzie, w tym w klasach pochodnych.protected– dostępne tylko w klasie bazowej i klasach pochodnych.private– dostępne tylko w klasie bazowej (niedostępne dla klas pochodnych).
4. Konstruktory w dziedziczeniu
- Konstruktor klasy bazowej jest wywoływany przed konstruktorem klasy pochodnej.
- Można wywołać konkretny konstruktor klasy bazowej używając słowa kluczowego
base.
Przykład bez base:
Wynik:
Konstruktor Zwierze
Konstruktor Pies
Przykład z base:
Wynik:
Zwierze: Burek
Pies: Owczarek
5. Słowo kluczowe base
baseodnosi się do klasy bazowej.- Używane do:
- Wywoływania konstruktora klasy bazowej,
- Wywoływania metod klasy bazowej przesłoniętych w klasie pochodnej.
6. Przesłanianie metod – virtual, override, new
6.1. virtual i override
virtual– metoda w klasie bazowej, którą można przesłonić.override– przesłonięcie metody wirtualnej w klasie pochodnej.
6.2. new (ukrywanie metod)
new– ukrywa metodę klasy bazowej zamiast ją przesłaniać.- Metoda nie jest wirtualna i nie uczestniczy w polimorfizmie.
7. Klasy abstrakcyjne (abstract)
- Klasa abstrakcyjna to klasa, której nie można bezpośrednio instancjonować.
- Może zawierać metody abstrakcyjne (bez implementacji), które muszą być zaimplementowane w klasach pochodnych.
- Używa się do tworzenia ogólnych szablonów.
Składnia:
Przykład:
8. Klasy zapieczętowane (sealed)
sealed– klasa, z której nie można dziedziczyć.- Używane do zapobiegania dalszemu rozszerzaniu klasy.
9. Dziedziczenie wielokrotne – BRAK w C
- C# nie obsługuje dziedziczenia wielokrotnego (jedna klasa nie może dziedziczyć z wielu klas).
- Zamiast tego używa się interfejsów (omówione w kolejnej lekcji).
10. Hierarchia dziedziczenia
- Dziedziczenie tworzy hierarchię klas.
- Przykład:
Zwierze
├── Ssak
│ ├── Pies
│ ├── Kot
├── Ptak
├── Orzel
├── Wrobel
11. Przykładowy program
Wynik:
Toyota z 4 kołami jedzie po drodze.
Jacht płynie po wodzie.
12. Najlepsze praktyki
- Używaj dziedziczenia do modelowania relacji „jest" (np. Pies jest Zwierzęciem).
- Preferuj kompozycję nad dziedziczeniem w przypadku relacji „ma".
- Używaj klas abstrakcyjnych do tworzenia ogólnych szablonów.
- Używaj
sealedtylko wtedy, gdy jest pewność, że klasa nie będzie rozszerzana. - Nie twórz zbyt głębokich hierarchii – utrudniają one zrozumienie kodu.