Wpis z mikrobloga

Jak funkcja przyjmuje jako parametr jakąś klasę (no wiadomo, że instancję), to przyjmuje też wszystkie klasy ją rozszerzające (dziedziczące po niej). Jak się nazywa ten mechanizm? Polimorfizm?

#programowanie
  • 18
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@rationalistic: To się nazywa po prostu dziedziczenie. Każda instancja klasy rozszerzającej jest również instancją klasy dziedziczonej. Tak jak każdy Polak jest człowiekiem, a każdy człowiek ssakiem.
  • Odpowiedz
@rationalistic: A polimorfizm masz wtedy, kiedy wywoływana jest metoda z klasy rozszerzającej.

Np. jest klasa Wojownik z metodą Bij() oraz klasy Łucznik, Rycerz ją rozszerzające.

Teraz gdzieś masz pole bitwy, które ma dwóch Wojowników. Tam sobie na nich wywołujesz metody Bij() (co ważne na klasie Wojownik). I Łucznik będzie strzelał z łuku, a Rycerz siepał mieczem (bo tak mają zaimplementowane Bij).
  • Odpowiedz
@Yahoo_: Nie chce sie totalnie ośmieszyć, ale muszę zaryzykować, bo może rozświetlisz mi ostatnią wątpliwość. Jaka jest różnica między Wojownik woj2 = new Lucznik() a IWojownik woj2 = new Lucznik()

czy z używania interfejsów w tym przypadku wynikają jakiekolwiek korzyści?
  • Odpowiedz
@rationalistic: Ogólnie to metoda jest w stanie przyjąć każdą instancję klasy dziedziczącej po jej argumencie, ale to od programisty metody zależy, czy będzie w stanie prawidłowo ją obsłużyć. Zasada podstawienia Liskov, jedna z najważniejszych zasad dobrego programowania, mówi że:

Funkcje które używają wskaźników lub referencji do klas bazowych, muszą być w stanie używać również obiektów klas dziedziczących po klasach bazowych, bez dokładnej znajomości tych obiektów.


Polecam Ci zapoznać się z
  • Odpowiedz
@Onoki: W tym przypadku o którym myślę akurat nie ma problemu, bo mam w repozytorium jedną metodę dla wszystkich typów dziedziczących, ale jej jedynym zadaniem jest wywołani metod w dataContext które są już przeciążone zależnie od typu na wejściu.
  • Odpowiedz