Masz klase "Rodzic"
Masz klase "Dziecko"
Dziecko dziedziczy po rodzicu
Rodzic może chodzić, więc dziecko też - pod warunkiem, że metoda chodzenie() jest u rodzica publiczna lub chroniona
Przykład z życia
Komunikacja klient-serwer (testy end to end)
(ja tak to zbudowałem u siebie)
ServerConnection - połączenie z serwerem, posiada instancje klasy do łączenia się z ustalonym z góry serwerem
Po niej dziedziczą klasy z metodami, powszechnie używanymi - typu "stwórz użytkownika o tych danych", "dodaj post o tych danych"
Po nich dziedziczą klasy z metodami - testami, które wykorzystują metod powszechnie używanych, jak i komunikacji z serwerem
Równie dobrze mógłbym w każdej z klas testów tworzyć osobną instancję klasy z konfiguracją, z której bym korzystał i którą bym przekazywał do klas z metodami pomocniczymi - których instancje też musiałbym tworzyć
Poco, skoro mogę zrobić sobie "drzewko", gdzie raz tworze komunikacje z serwerem i podpinam się pod nią różnymi gałęziami (dziedziczenie po tej klasie).
A po klasach dziedziczących - klasach które posiadają powtarzalne metody, dziedziczą metody z testami, które używają tych metod.
Zauważ że zarówno klasy z metodami jak i klasy testów, wymagają połączenia z serwerem, tworząc osobne instancje musiałbym robić mase obiektów a tak to mam tylko rodzic - dziecko - dziecko dziecka (wzorzec singleton tak w ogóle)
Albo inny przykład - MVC
Gdzie system musi wiedzieć że kontroler jest kontrolerem - więc każdy z kontrolerów dziedziczy po klasie kontroler
+zalecam dziedziczenie jednostopniowe, ewentualnie (w specyficznych przypadkach jak mój) dwustopniowe
chodzi o to, żeby się nie pogubić
masz klase D która dziedziczy po klasach C B i A
masz do wykorzystania masę metod które odziedziczyłeś (wgl wpadł mi też inny pomysł na wytłumaczenie dziedziczenia - możesz użyć metody którą posiada rodzic) i... łatwo się w tym wszystkim pogubić
Jak dziedziczysz po jednej klasie jest estetycznie i przejrzyście, dwie klasy to już max