If a constant in a sub-interface replaces/shadows a constant in a super interface (both Java), when trying to access the sub-interface's constant value from Groovy, the behaviour is intermittantly incorrect - sometimes the sub-interface's value is returned (correct) and sometimes the super interface's value is returned (incorrect).
In Java the sub-interface's value is always returned, as expected.
See source code below that demonstrates this: InterfaceA.java, InterfaceB.java, ShowBugGroovy.groovy, ShowBugJava.java
If ShowBugGroovy is repeatedly run, sometimes the assertion fails, sometimes it passes (randomly?). I believe the behaviour is the same for concrete implementations of the sub-interface.