2010-01-10 91 views
54

我有一個基本的抽象類(特徵)。它有一個抽象方法foo()。它由幾個派生類擴展和實現。我想要創建一個可以混合到派生類中的特徵,以便它實現foo(),然後調用派生類的foo()在Scala中重寫特徵和抽象方法

喜歡的東西:

trait Foo { 
    def foo() 
} 

trait M extends Foo { 
    override def foo() { 
    println("M") 
    super.foo() 
    } 
} 

class FooImpl1 extends Foo { 
    override def foo() { 
    println("Impl") 
    } 
} 

class FooImpl2 extends FooImpl1 with M 

我試着自我類型和結構類型,但我不能得到它的工作。

回答

93

你非常接近。將摘要修飾符添加到M.foo中,並且您具有「可堆疊特徵」模式:http://www.artima.com/scalazine/articles/stackable_trait_pattern.html

trait Foo { 
    def foo() 
} 

trait M extends Foo { 
    abstract override def foo() {println("M"); super.foo()} 
} 

class FooImpl1 extends Foo { 
    override def foo() {println("Impl")} 
} 

class FooImpl2 extends FooImpl1 with M 
相關問題