Cechy, dziedziczenie i interfejsy w Groovy, kiedy ich używać?

10

Uczę się groovy i właśnie dowiedziałem się o nowej funkcji dodanej w 2.3, która jest dodatkiem do cech . Teraz wydaje mi się, że cechy pozwalają zrobić w zasadzie wszystko, co może zrobić superklasa i interfejs.

Czy dodanie cech do Groovy powoduje, że dziedziczenie i interfejsy stają się przestarzałe?

A jeśli nie, to kiedy najlepiej wykorzystać każdy z tych mechanizmów?

Ryan Stull
źródło
„groovy i właśnie dowiedziałem się o nowej funkcji dodanej w 2.3, która jest dodawaniem cech” - cechy zostały po raz pierwszy dodane do Groovy w wersji wcześniejszej niż 2.0 za pośrednictwem dodatku AST o nazwie booster Groovy ++, patrz code.google.com/p / groovypptest / wiki / Traits
Vorg van Geir
Naprawdę powinieneś przeczytać dokumenty o cechach. Żadna podana tutaj odpowiedź nie będzie kompletna bez wspomnienia o wszystkim, o czym mówią ci doktorzy; Należy szczególnie zwrócić uwagę na sekcje 13 - koniec
smac89,

Odpowiedzi:

4

Cechy łączą to, co najlepsze z obu światów - dziedziczenie (abstrakcyjnych) klas i implementację interfejsów. Cecha może zawierać domyślne implementacje metod, a jednak typ może implementować wiele cech jednocześnie. Umożliwia to pewnego rodzaju wielokrotne dziedziczenie, ale w dobry sposób, unikając śmiertelnego diamentu śmierci .

Jeśli nie wiesz, jak zacząć, użyj cech. Zyskujesz elastyczność i możesz w razie potrzeby przełączyć się na interfejsy lub dziedziczenie klas.

fxfour
źródło
3
W interfejsach możesz zdefiniować domyślną metodę, więc jaka jest logiczna różnica?
Gilad Baruchian
jestem również mylony z różnicą między cechami a domyślnymi metodami interfejsu. Mogę tylko założyć, że cechy w groovy zostały wprowadzone wcześniej niż domyślne metody w java
olyv
Cecha pozwala definiować zwykłe pola, a nie tylko pola statyczne, ponieważ ogranicza cię interfejs Java
smac89
Jeśli masz wątpliwości co do cech, przeczytaj dokumenty . Są bardzo pouczające
smac89
1
@ smac89, dzięki, to było naprawdę pomocne!
olyv