class A {
def test() { println "parent" }
}
@Mixin(A)
class B {
def test() { println "child" }
}
new B().test() // prints "parent", but I am expecting it to print "child"
这看起来像某种反向继承。
mixins仅用作定义新方法的手段吗?
我当然可以使用常规继承并使用extends,但是用例需要一个表单构建器,其中每个域都有一个唯一的表单实现,我想在我的应用程序控制器中捕获表单请求并执行MyUniqueDomainForm .mixin DefaultFormMethods(所以我只需要在需要时定义默认方法,而不必在每个表单类中导入my.package.app.DefaultFormMethods)
答案 0 :(得分:2)
无论你mixin
会使已经存在的任何东西超载......
在此示例中,在编译时B.test()
重载继承的A.test()
方法
但是在运行时,A.test()
通过mixin
添加,重新重载先前重载的方法
如果不是这样,你将无法使用mixins
改变课程的现有特征
ie(这是一个愚蠢的例子,但我相信它得到了我的观点):
class AddNotMinus {
static def minus( int a, int b ) {
a + b
}
}
Integer.mixin AddNotMinus
println 10 - 10
打印20