1. Wieloryby i krowy
Oto ciekawy fakt zoologiczny: krowa jest znacznie bliższa wielorybowi niż np. hipopotamowi. Okazuje się, że krowy i wieloryby są stosunkowo bliskimi krewnymi.
Popatrz tutaj. Opowiemy o polimorfizmie — kolejnym bardzo potężnym narzędziu OOP . Ma cztery cechy.
2. Dziedziczenie nie jest panaceum
Wyobraź sobie, że napisałeś Cow
klasę do gry. Ma wiele pól i metod. Obiekty tej klasy mogą robić różne rzeczy: chodzić, jeść i spać. Krowy noszą również dzwonek, który dzwoni, gdy chodzą. Załóżmy, że zaimplementowałeś wszystko w klasie w najdrobniejszych szczegółach.
A potem przychodzi twoja klientka i mówi, że chce wypuścić nowy poziom gry, w którym cała akcja toczy się na morzu, a głównym bohaterem jest wieloryb.
Zaczynasz projektować Whale
klasę i zdajesz sobie sprawę, że różni się ona tylko nieznacznie od Cow
klasy. Logika obu klas jest bardzo podobna i decydujesz się na dziedziczenie.
Klasa Cow
idealnie nadaje się do przejęcia roli klasy nadrzędnej: posiada wszystkie niezbędne zmienne i metody. Wszystko, co musimy zrobić, to dać wielorybowi umiejętność pływania. Ale jest problem: twój wieloryb ma nogi, rogi i dzwonek. W końcu ta funkcjonalność jest zaimplementowana wewnątrz Cow
klasy. Co można tutaj zrobić?
3. Nadpisywanie metod
Nadpisywanie metod przychodzi nam na ratunek. Jeśli odziedziczyliśmy metodę, która nie do końca robi to, czego chcemy w naszej nowej klasie, możemy zastąpić tę metodę inną.
Jak to się robi? W naszej klasie potomnej deklarujemy tę samą metodę, co metodę klasy nadrzędnej, którą chcemy przesłonić. Piszemy w nim nasz nowy kod. I to wszystko — to tak, jakby stara metoda w klasie nadrzędnej po prostu nie istniała.
Tak to działa:
Kod | Opis |
---|---|
|
|
|
Ten kod wyświetla następujący tekst na ekranie:
|
|
Ten kod wyświetla na ekranie:
|
Po odziedziczeniu Cow
klasy i zastąpieniu printName
metody, Whale
klasa faktycznie zawiera następujące dane i metody:
|
Nie znamy żadnej starej metody. |
GO TO FULL VERSION