Cześć, mam takie oto zdanie w zadaniu: "Zaimplementuj klasę pochodną Sniadanie, która dodatkowo posiada pole rodzajHerbaty. Herbata może mieć trzy rodzaje smaków: cytrynowa, malinowa, owocowa.
bardziej obiektowo to klasa Śniadanie nie powinna trzymać informacji o herbacie czy jest malinowa czy owocowa, tylko raczej powinna trzymać gdzieś samą referencję do napoju (albo napojów) gdzie napój mógłby być instancją klasy Herbata (albo innej, np. instancją klasy Kawa) i dopiero herbata zawierałaby w sobie informacje czy jest cytrynowa, malinowa czy owocowa, czy może jest malinowo-owocowo-cytrynowa.
Co do polimorfizmu to tak. Jeśli masz klasę Danie, to ono ma jakieś operacje np. sprawdźCenę*, które oblicza cenę specyficzną dla danego dania. Np. możesz sobie założyć, że będziesz miał Happy Hours w swojej knajpie na śniadania. Ale tylko między 9 a 10. Więc powiedzmy robisz metodę sprawdźCenę klasie Śniadanie, ktora ta metoda automatycznie będzie sprawdzała czy jest między 9 a 10 rano i jeśli tak, to obniży cenę o 50%.
Z drugiej strony możesz kiedyś zrobić klasy Obiad czy Familijna Wyżerka, która będzie miała inne warunki promocji i cen, więc będzie miała własną metodę sprawdźCenę.
Z drugiej strony zewnętrzne obiekty (np. obiekt Kasa) nie muszą wiedzieć, czy mają do czynienia ze Śniadaniem czy z Obiadem, wiedzą tylko tyle, że mają do czynienia z obiektem klasy Danie, która definiuje pewien wspólny interfejs, w skład którego będzie wchodziła metoda sprawdźCenę :)
*tak się przyjęło i tak ci radzę, żeby w kodzie wszystkie zmienne pisać po angielsku, ale na potrzeby przykładu niech będzie, że sprawdźCenę a nie np. getPrice.