You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2025/01/07 07:08:00 UTC
[jira] [Commented] (GROOVY-11548) Could not inherit class and interface where class has a final method overridden by interface
[ https://issues.apache.org/jira/browse/GROOVY-11548?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17910517#comment-17910517 ]
Paul King commented on GROOVY-11548:
------------------------------------
This is kind of by design (well, an implementation detail in Groovy 4). Groovy 5 compiles default interface methods natively. Groovy 4 emulates them with traits. So, your interface (because it has a default method) is converted to:
{code:groovy}
trait I0 {
void func() { }
}
{code}
And the semantics of traits is to override rather than be a default. Groovy 5 lets you pick between traits and default methods in interfaces so you get the best of both worlds depending on your needs. The workaround in Groovy 4 is to write just that one interface in Java.
> Could not inherit class and interface where class has a final method overridden by interface
> --------------------------------------------------------------------------------------------
>
> Key: GROOVY-11548
> URL: https://issues.apache.org/jira/browse/GROOVY-11548
> Project: Groovy
> Issue Type: Bug
> Components: Compiler
> Affects Versions: 4.0.24
> Environment: Tried on Linux and Windows, the same error.
> Reporter: Xiaotian Ma
> Priority: Major
> Fix For: 5.0.0-alpha-11
>
>
> Compile following code.
> {code:groovy}
> class A {
> final public void func() {
> }
> }
> interface I0 {
> public default void func() {
> }
> }
> class B extends A implements I0 {
> }{code}
> Groovy 4.0.24:
> {code:java}
> A.groovy: -1: You are not allowed to override the final method func() from class 'A'.
> @ line -1, column -1.
> 1 error{code}
> Groovy 5.0.0-alpha-11: passed
--
This message was sent by Atlassian Jira
(v8.20.10#820010)