我有一个抽象基类 ( Base
),它定义了一些堆栈特征 ( StackingTrait
)。
trait Base {
def foo
}
trait StackingTrait extends Base {
abstract override def foo { super.foo }
}
使用以下语法实现子类会非常方便,但这不起作用,因为编译器说 foo 需要在重新编译时声明,override
然后再使用abstract override
,这是无效的,因为Impl
它是一个类。
class Impl extends Base with StackingTrait {
def foo {}
}
我想不出为什么不允许这种语法的充分理由;foo 在逻辑上被定义为,Impl
以便在概念上发生堆叠的顺序保持不变。
注意:我想出了这个解决方法,它可以有效地做我想做的事情,但是辅助类的必要性让我想要一个更好的解决方案。
class ImplHelper extends Base {
def foo {}
}
class Impl extends ImplHelper with StackingTrait
为什么所需的语法无法编译,是否有优雅的解决方案?