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?



„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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.