...using inheritance is too tightly coupled with the implementation. That is, the actual implementation is written so that one of the public methods actually use another. If you override both, and you call super, then you might get unwanted side-effects. If the implementation changes in a later version, then you will have to update your handling of it as well.http://stackoverflow.com/questions/23121890/difference-between-delegate-mixin-and-traits-in-groovy