Cześć, możecie mi wytłumaczyć do czego używane są interfejsy. Znam definicje, znam zasadę tworzenia, ale nie wiem po co to wszystko. Skoro pisze kod i tworze np klasy auto i rower to chyba wiem, że muszą mieć metodę jedź i nie potrzebuje do tego interfejsu który wymusi na mnie napisanie tych metod. To samo pytanie tyczy się klas abstrakcyjnych. Mam mocne przekonanie, że czegoś nie doczytałem i dlatego nie zauważam ani tym bardziej nie rozumiem ich zalet. Mogę prosić o jakieś przykłady, które pozwolą mi zrozumieć sens istnienia tych mechanizmów?
C`a napisał(a):
Skoro pisze kod i tworze np klasy auto i rower to chyba wiem, że muszą mieć metodę jedź i nie potrzebuje do tego interfejsu który wymusi na mnie napisanie tych metod.
To napisz sobie nie używając interfejsów/klas abstrakcyjnych jedną metodę, która przyjmie kolekcję wszystkich Twoich pojazdów i wywoła metodę Jedź
na każdym z nich.
C`a napisał(a):
Skoro pisze kod i tworze np klasy auto i rower to chyba wiem, że muszą mieć metodę jedź i nie potrzebuje do tego interfejsu który wymusi na mnie napisanie tych metod.
Tak, możesz mieć dwie osobne klasy i obie mogą posiadać metodę Go
. Tyle że nie napiszesz sobie metody, która będzie mogła przyjąć dowolny obiekt posiadający metodę Go
– musiałbyś skorzystać z polimorfizmu. Czyli stworzyć klasę abstrakcyjną z metodą Go
(np. Vehicle
), następnie utworzyć klasy Car
i Bike
i w nich nadpisać metodę Go
.
Dopiero wtedy mógłbyć zdefiniować dla przykładu metodę, która w parametrze typu Vehicle
będzie w stanie przyjąć obiekt klasy Car
i Bike
, a także każdy inny, który z Vehicle
dziedziczy.
Użycie interfejsu rozwiązuje problem dziedziczenia. Wszystkie klasy muszą posiadać narzucone przez interfejs metody, ale nie muszą dziedziczyć z tej samej klasy abstrakcyjnej.
To samo pytanie tyczy się klas abstrakcyjnych. Mam mocne przekonanie, że czegoś nie doczytałem i dlatego nie zauważam ani tym bardziej nie rozumiem ich zalet.
No to idź poczytać i wróć jak już będziesz po lekturze.
somekind napisał(a):
C`a napisał(a):
Skoro pisze kod i tworze np klasy auto i rower to chyba wiem, że muszą mieć metodę jedź i nie potrzebuje do tego interfejsu który wymusi na mnie napisanie tych metod.
To napisz sobie nie używając interfejsów/klas abstrakcyjnych jedną metodę, która przyjmie kolekcję wszystkich Twoich pojazdów i wywoła metodę
Jedź
na każdym z nich.
ok czyli chodzi Ci pewnie że jak mam interfejs to mogę zrobić kolekcje składającą się z rożnych pojazdów, korzystając z polimorfizmu? to jest istotna cecha
ok czyli chodzi Ci pewnie że jak mam interfejs to mogę zrobić kolekcje składającą się z rożnych pojazdów, korzystając z polimorfizmu? to jest istotna cecha
możesz stworzyć kolekcję dowolnych obiektów implementujący dany interfejs.....
EDT .. polimorfizm nie jest do niczego potrzebny, obiekty mogą być z zupełnie różnych klas, jedyny warunek to taki że muszą implementować zadany interfejs
Interfejs to taki rodzaj umowy opisującej jakie operacje są/muszą być udostępnione przez klasę.
Czy klasa musi brać na siebie zobowiązanie w postaci wypełnienia umowy? Nie. Czy umowy są potrzebne? Zależy komu i w jakim celu :-)