有代码:
class A(name:String)
trait E extends A
new E{} //compile error
这种遗传是否可行?试图在匿名类的主体中创建val或def,没有帮助。
答案 0 :(得分:13)
几种可能的解决方案:
1)在类 A 构造函数中设置名称的默认值:
class A(name : String = "name")
trait E extends A
new E {} // {} is obligatory. trait E is abstract and cannot be instantiated`
2)将特质 E 与 A 的实例混合:
object inst extends A("name") with E
// or:
new A("name") with E
答案 1 :(得分:2)
A
接受构造函数参数,因此您需要传递它,例如
new A("someName") with E
答案 2 :(得分:1)
如果您想限制特质E与A类混合,您只能使用自我类型。但是,无法使用A(...)
将变量定义为新Eclass A(val name: String)
trait E { self: A =>
def printName() = println(self.name)
}
val e = new A("This is A") with E
e.printName()