2016-12-02 53 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

中的构造函数谢谢!这实际上是我想要的:) –