如何从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方式。