groovy - 为什么在 Groovy(版本 2.4.5)中调用 super 会错过父类?

标签 groovy

鉴于以下类(class)安排:

class GrandParent { 
    String init() { 
        return "GrandParent init, " 
    } 
}

class Parent extends GrandParent { 
    String init() { 
        return super.init() + "Parent init, " 
    } 
}

class ChildInitAndVisit extends Parent { 
    String init() { 
        return super.init() + "Child init" 
    }

    String visit() { 
        return super.init() + "Child visit" 
    } 
}

class ChildVisitOnly extends Parent { 
    String visit() { 
        return super.init() + "Child visit" 
    } 
}

然后以这种方式使用它们:

iv = new ChildInitAndVisit()
println "ChildInitAndVisit - calling init() -> ${iv.init()}"
println "ChildInitAndVisit - calling visit() -> ${iv.visit()}"

v = new ChildVisitOnly()
println "ChildVisitOnly - calling visit() -> ${v.visit()}"

我希望看到:

ChildVisitOnly - calling visit() -> GrandParent init, Parent init, Child visit

作为最后一个 println 的输出。相反,我看到:

ChildVisitOnly - calling visit() -> GrandParent init, Child visit

这与 ChildInitAndVisit 类的行为形成对比,并且与旧版本 Groovy 下的行为不同 - 我检查了 2.3.4。

这是 Groovy 错误吗?或者我应该做一些不同的事情?

最佳答案

在我看来,这是一个错误。 ChildVisitOnly 中的 super.init() 必须调用 Parent#init()。

关于groovy - 为什么在 Groovy(版本 2.4.5)中调用 super 会错过父类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764666/

相关文章:

java - 搜索字符串并获取第二个匹配项

java - 在 Java/Groovy 中嵌入处理

java - Grails:groovy.sql.Sql 和 Model.withTransaction 会发生什么?

groovy - 消息未使用 JSR223 和 groovy 在 jmeter 的控制台上打印

gradle - gradle避免依赖任务在异常发生时不运行

groovy - 在脚本断言 SOAP UI 中运行测试步骤

gradle - Gradle 3.4:使用ConfigSlurper构建配置文件

Groovy - 使用泛型进行类型检查不起作用

testing - 似乎 Groovy 在这两种情况下的行为不同?

spring - 如何在 Groovy 中使用 Spring DSL 基于环境(dev、qa、prod)注入(inject)依赖?