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