[ 
https://issues.apache.org/jira/browse/GROOVY-7436?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14561827#comment-14561827
 ] 

Thornton Chamberlain commented on GROOVY-7436:
----------------------------------------------

I was just thinking the above example would be better if op1() were a template 
method, so {noformat}String op1() {"${op2()}${op3()}"}{noformat}
Then the assert would be x.op1() == 'BC', but we get 'nullC' instead.

> Multiple inheritance of traits - conflict resolution
> ----------------------------------------------------
>
>                 Key: GROOVY-7436
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7436
>             Project: Groovy
>          Issue Type: Bug
>            Reporter: Thornton Chamberlain
>              Labels: usertask
>
> {noformat}
> trait A {
>     String exec() {'A'}
> }
> trait B implements A {
>     String exec() {'B'}
> }
> trait C implements A {
> }
> class X implements A, B, C {}
> def x = new X()
> assert x.exec() == 'B'
> {noformat}
> An equivalent example in Scala will use the exec() implementation from B, as 
> asserted.  Groovy will take the implementation from the last declared trait, 
> C, which inherits the implementation from A but does not define its own 
> implementation.  I think Groovy should use the implementation from the last 
> declared trait that defines its own implementation.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to