2011-09-21 82 views
8

我想用stackable trait pattern与单对象,但我似乎无法找到如何使编译器高兴:可堆叠特质模式可以与单身物件一起使用吗?

abstract class Pr { 
    def pr() 
} 

trait PrePostPr extends Pr { 
    abstract override def pr() { 
    println("prepr") 
    super.pr() 
    println("postpr") 
    } 
} 

object Foo extends Pr with PrePostPr { 
    def pr() = println("Foo") 
} 

试图在REPL来评价这将产生以下错误:

<console>:10: error: overriding method pr in trait PrePostPr of type()Unit; 
method pr needs `override' modifier 
     def pr() = println("Foo") 

回答

13

它可以,但这样的:

abstract class Pr { 
    def pr() 
} 

trait PrePostPr extends Pr { 
    abstract override def pr() { 
    println("prepr") 
    super.pr() 
    println("postpr") 
    } 
} 

class ImplPr extends Pr { 
    def pr() = println("Foo") 
} 

object Foo extends ImplPr with PrePostPr 

的实施方案具有存在于超类/ supertraits之一。抽象修改特征必须在继承列表中实现的类/特征之后。

+0

啊,谢谢你的解释! – srparish

+0

看起来使用相同的名字很好,所以我可以命名类“Foo”,然后让对象“Foo”扩展类“Foo”。 – srparish

+0

是的,这是 - 在这种情况下,对象'Foo'被称为类“Foo”的伴侣对象。 – axel22

相关问题