2016-12-02 62 views
0

我想做這樣的一些類。斯卡拉 - 擴展多個類的參數

class A(val a1: String) { 
    def message() = println(a1) 
} 
class B(val b1: String) { 
    def doB() = println(b1) 
} 
class C(val c1: String) { 
    def something() = println(c1) 
} 
class AB(val a: String, val b: String) extends A(a) with B(b) { 
    //            ^error 
} 
class AC.. 
class BC.. 

我試圖使用trait,但由於特徵不能有任何參數,所以它也犯了錯誤。我應該如何做這樣的事情。

回答

1

它給你錯誤,因爲trait沒有構造函數。但是您可以將其更改爲trait這樣的參數;

class A(val a1: String) { 
    def message() = println(a1) 
} 

trait B { 

    def b: String 

    def doB() = println(b) 
} 

class AB(val a: String, val b: String) extends A(a) with B { 
    //this should work            
} 
+0

那麼我需要在AB類的某個地方設置'b'值嗎? –

+0

正如你看到的第二個參數是b:String,這意味着我們在特質中重寫b。所以不需要設置,如果你通過AB –

+0

中的構造函數謝謝!這實際上是我想要的:) –