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()
}
}