我试图使用mixins来获得类似AOP /拦截器的编程风格。
这是我的代码:
trait X {
def run
}
trait Y extends X {
abstract override def run = {
println("hi")
super.run
}
}
object Z extends X with Y {
def run = println("bye")
}
尝试编译时出现以下错误:
方法运行需要`覆盖'改性剂
我在这里做错了什么?我试图添加'覆盖'修饰符,但它给了我:
方法运行需要`抽象覆盖'改性剂
答案 0 :(得分:4)
您可以这样做的一种方法是在扩展基座A
的类X
中定义基本功能,并提供混合A
和Y
的对象(或类) trait X {
def run
}
trait Y extends X {
abstract override def run = {
println("hi")
super.run
}
}
class A extends X {
def run = println("bye")
}
object Z extends A with Y
(以及您可能定义的所有其他特征):
Z.run
hi
bye
将打印
{{1}}
答案 1 :(得分:1)
您应该创建基本抽象类:
abstract class A {
def run
}
然后用X或Y扩展它:
trait X extends A /* OR trait Y extends A */ {
def run
}
trait Y /*extends A*/ extends X {
abstract override def run = {
println("hi")
super.run
}
}
然后将Z.run
移到超类:
class S extends A {
def run = println("bye")
}
object Z extends S with X with Y {
//override def run = println("bye")
}
Z.run
// hi
// bye