ChatGPT解决这个技术问题 Extra ChatGPT

Scala 中的特征和抽象方法覆盖

我有一个基本的抽象类(特征)。它有一个抽象方法 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 

我尝试了自我类型和结构类型,但我无法让它工作。


r
retronym

你非常亲近。将 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() 会做什么?

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅