gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:18:25 25 4
gpt4 key购买 nike

鉴于以下类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com