Tratti, ereditarietà e interfacce in Groovy, quando usarli?


10

Sto imparando groovy e ho appena imparato a conoscere la nuova funzionalità aggiunta in 2.3, che è l'aggiunta di Traits . Ora a me sembra che i tratti ti permettano di fare praticamente tutto ciò che una superclasse e un'interfaccia possono fare.

L'aggiunta di Traits a Groovy rende obsolete l'ereditarietà e le interfacce?

E se no, qual è il momento migliore per utilizzare ciascuno di questi meccanismi?



"groovy e ho appena appreso della nuova funzionalità aggiunta in 2.3, che è l'aggiunta di Traits" - I tratti sono stati inizialmente aggiunti a Groovy precedente alla 2.0 tramite un addon AST chiamato booster Groovy ++, vedi code.google.com/p / groovypptest / wiki / Traits
Vorg van Geir,

Dovresti davvero leggere i documenti sui tratti. Nessuna risposta fornita qui sarà completa senza menzionare tutto ciò di cui parlano questi documenti; Prestare particolare attenzione alle sezioni 13 - fine
smac89 del

Risposte:


4

I tratti combinano il meglio di entrambi i mondi: l'eredità delle classi (astratte) e l'implementazione delle interfacce. Un tratto può contenere implementazioni predefinite di metodi e tuttavia un tipo può implementare più tratti contemporaneamente. Ciò consente una sorta di eredità multipla, ma in senso buono, evitando il mortale diamante della morte .

Se non sai come iniziare, usa i tratti. Ottieni flessibilità e puoi passare alle interfacce o all'eredità delle classi in seguito, se necessario.


3
Nelle interfacce è possibile definire il metodo predefinito, quindi qual è la differenza logica?
Gilad Baruchian,

Sono anche confuso con la differenza tra tratti e metodi predefiniti dell'interfaccia. Posso solo supporre che i tratti in groovy siano stati introdotti prima dei metodi predefiniti in java
olyv,

Un tratto ti consente di definire campi regolari, non solo campi statici come l'interfaccia di java ti limita a
smac89

Se sei confuso sui tratti, leggi i documenti . Sono molto istruttivi
smac89,

1
@ smac89, grazie, è stato davvero utile!
olyv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.