2011-09-21 24 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

相關問題