在许多关于 Groovy Traits 的博客中,都提到它将解决钻石问题。但是我不清楚这个概念,即特征将如何解决钻石问题。
任何人都可以解释一下。
菱形问题是一个问题,当你有多个继承,两个或多个超类定义一个或多个具有相同签名的函数时。
具有时髦的特征,行为是明确的。默认情况下,选择最后一个实现。
trait A {
String name() { "A" }
}
trait B {
String name() { "B" }
}
class C implements A,B { }
class D implements B,A { }
assert new C().name() == "B"
assert new D().name() == "A"
也可以选择您想要的那个:
class E implements A,B {
String name() { A.super.name() + B.super.name() }
}
assert new E().name() == "AB"