如何从groovy匿名类访问超级或父方法?
我想知道如何使用匿名类从重写子方法访问父方法。如下面的示例所示,如何从groovy匿名类访问超级或父方法?,groovy,Groovy,我想知道如何使用匿名类从重写子方法访问父方法。如下面的示例所示,cc被声明为匿名类。如何覆盖父方法testMethod1,但仍然可以访问原始方法?关键字super似乎对我的情况没有帮助 abstract class ParentClass { def prop1="abc" def testMethod1 () { println("testMethod1 in parent"); } def testMethod2 () { p
cc
被声明为匿名类。如何覆盖父方法testMethod1
,但仍然可以访问原始方法?关键字super
似乎对我的情况没有帮助
abstract class ParentClass {
def prop1="abc"
def testMethod1 () {
println("testMethod1 in parent");
}
def testMethod2 () {
println("testMethod2 in parent");
}
}
class ChildClass extends ParentClass {
}
def cc = [
testMethod1:{
super.testMethod1(); // Error, why? What is the proper way to call parent method?
println("testMethod1 in child");
},
testMethod2:{
println("testMethod2 in child");
}
] as ChildClass;
println("Starting");
println (cc.prop1);
cc.testMethod2();
//cc.testMethod1();
结果是:
Starting
abc
testMethod2 in child
您可以在这里尝试:
Groovy闭包不支持
super
访问super类的成员。
见:
建议使用以下代码:
abstract class ParentClass {
def prop1="abc"
def testMethod1() {
println("testMethod1 in parent")
}
def testMethod2() {
println("testMethod2 in parent")
}
}
class ChildClass extends ParentClass {
def testMethod1() {
super.testMethod1()
println("testMethod1 in child")
}
def testMethod2() {
println("testMethod2 in child")
}
}
cc = new ChildClass()
println("Starting")
println(cc.prop1)
cc.testMethod1()
cc.testMethod2()
输出为:
Starting
abc
testMethod1 in parent
testMethod1 in child
testMethod2 in child
以下是AIC的方式:
cc = new ParentClass() {
def testMethod1() {
super.testMethod1()
println("testMethod1 in child")
}
def testMethod2() {
println("testMethod2 in child")
}
}
我认为这只是因为你能做,并不意味着你应该做。。。为什么不重写
ChildClass
中的方法?或如果完全没有必要,为什么需要与类的关系呢?我知道这可以使用普通声明来实现。我想知道是否有一种方法可以通过匿名类编码方式实现。请查看更新的答案,添加了AIC方式。