Scala 中的特征和抽象方法覆盖
Posted
技术标签:
【中文标题】Scala 中的特征和抽象方法覆盖【英文标题】:Traits and abstract methods override in Scala 【发布时间】:2011-01-03 13:08:15 【问题描述】:我有一个基础抽象类(特征)。它有一个抽象方法foo()
。它由几个派生类扩展和实现。我想创建一个可以混合到派生类中的特征,以便它实现foo()
,然后调用派生类的foo()
。
类似:
trait Foo
def foo()
trait M extends Foo
override def foo()
println("M")
super.foo()
class FooImpl1 extends Foo
override def foo()
println("Impl")
class FooImpl2 extends FooImpl1 with M
我尝试了自我类型和结构类型,但我无法让它工作。
【问题讨论】:
【参考方案1】:你们很亲密。将 abstract 修饰符添加到 M.foo,你就有了“Stackable Trait”模式:http://www.artima.com/scalazine/articles/stackable_trait_pattern.html
trait Foo
def foo()
trait M extends Foo
abstract override def foo() println("M"); super.foo()
class FooImpl1 extends Foo
override def foo() println("Impl")
class FooImpl2 extends FooImpl1 with M
【讨论】:
如果我没有 M 怎么办?我正在尝试覆盖类中 Foo 的方法并遇到相同的错误。 当 foo 在超类中未实现时,super.foo()
会做什么?以上是关于Scala 中的特征和抽象方法覆盖的主要内容,如果未能解决你的问题,请参考以下文章
抽象派生类中的抽象方法覆盖/实现抽象基类的抽象或具体方法。如何以及为啥?