Риси, спадкування та інтерфейси в Groovy, коли ними користуватися?


10

Я вивчаю бурхливо, і я щойно дізнався про нову функцію, додану в 2.3, що є додаванням ознак . Тепер мені здається, що риси дозволяють робити в основному все, що може зробити суперклас і інтерфейс.

Чи додавання ознак до Groovy робить спадщину та інтерфейси застарілими?

А якщо ні, то який найкращий час для використання кожного з цих механізмів?



"groovy, і я щойно дізнався про нову функцію, додану в 2.3, що є доповненням Traits" - Риси вперше додані до Groovy до 2.0 довідки через AST-доповнення під назвою Groovy ++ booster, див. code.google.com/p / groovypptest / wiki / Риси
Vorg van Geir

Ви справді повинні прочитати документи про риси. Жодна відповідь, надана тут, не буде повною, не згадуючи все, про що говорять документи; Особливо слід звернути увагу на розділи 13 - кінець
smac89

Відповіді:


4

Риси поєднують у собі найкращі з обох світів - успадкування (абстрактних) класів та реалізацію інтерфейсів. Ознака може містити реалізацію методів за замовчуванням, але тип може одночасно реалізувати кілька ознак. Це дозволяє отримати певне багаторазове успадкування, але хорошим способом, уникаючи смертельного діаманту смерті .

Якщо ви не знаєте, як почати, то використовуйте риси. Ви отримуєте гнучкість і згодом можете переходити до інтерфейсів чи успадкування класів, якщо потрібно.


3
В інтерфейсах можна визначити метод за замовчуванням, тож у чому логічна різниця?
Гілад Барухян

Я також плутаю різницю між ознаками та методами інтерфейсу за замовчуванням. Я можу тільки припустити, що риси в groovy були введені раніше, ніж методи за замовчуванням у java
olyv

Ознака дозволяє визначати регулярні поля, а не тільки статичні поля, оскільки інтерфейс Java обмежує вас
smac89

Якщо вас плутають риси, читайте документи . Вони дуже інформативні
smac89

1
@ smac89, дякую, це було дуже корисно!
olyv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.