Scala特征组合问题

Scala特征组合问题,scala,traits,Scala,Traits,我有一个无法修改其源的类: class Foo { def bar() = println("bar") } 我想在运行时将这一特性融入其中 trait Zee { this: Foo => abstract override def bar() = { println("before bar") super.bar() } } 这意味着栏不是ScalaObject对象的成员 我做错了什么?是否可以在不修改Foo源代码的情况下实现这一点 最终客户端代码

我有一个无法修改其源的类:

class Foo {

  def bar() = println("bar")

}
我想在运行时将这一特性融入其中

trait Zee { this: Foo =>

  abstract override def bar() = {
    println("before bar")
    super.bar()
  }
}
这意味着
栏不是ScalaObject对象的成员

我做错了什么?是否可以在不修改
Foo
源代码的情况下实现这一点

最终客户端代码需要如下所示:

val foo = new Foo with Zee
foo.bar() // should print 'before bar' and then 'bar'

您的Zee trait没有超级trait(ScalaObject的隐式继承除外),因此super不包含
bar
的定义,并且没有可重写或调用的内容(super.bar)

你为什么不在没有自我介绍的情况下写这篇文章

class Foo {

  def bar() = println("bar")

}


trait Zee extends Foo {

  abstract override def bar() = {
    println("before bar")
    super.bar()
  }
}

您的Zee trait没有超级trait(ScalaObject的隐式继承除外),因此super不包含
bar
的定义,并且没有可重写或调用的内容(super.bar)

你为什么不在没有自我介绍的情况下写这篇文章

class Foo {

  def bar() = println("bar")

}


trait Zee extends Foo {

  abstract override def bar() = {
    println("before bar")
    super.bar()
  }
}

您可以在trait中扩展Foo类:

trait Zee extends Foo

您的代码将正常工作。

您可以在trait中扩展Foo类:

trait Zee extends Foo

你的代码会起作用。

你的特质需要扩展

trait Zee extends Foo {
  abstract override def bar() = {
    println("before bar")
    super.bar()
  }
}

你的特质需要扩展

trait Zee extends Foo {
  abstract override def bar() = {
    println("before bar")
    super.bar()
  }
}