斯卡拉自我一般的非法继承

时间:2018-03-10 15:19:10

标签: scala oop generics inheritance

基本上这就是我想要做的。 具有成员和特征的特征,该特征继承该成员并对其进行初始化。 然后是一个类,它采用必须从第一个特征继承的泛型类型并访问该成员

object main extends App{
val z =  new c[b]()
  z.p()
}

trait a{
  val x : String
}

trait b extends a {
  val x = 1
}

class c [A <: a]  {
  self: A =>
  def p(): Unit ={
    print(x)
  }
}

但在行

val z =  new c[b]()

c [b]带下划线,编译器抱怨

  

&#34;非法继承,自我类型c [b]不符合A&#34;

我想定义从父特征继承的多个特征,然后定义一个接受父子特征之一并访问其值的类

1 个答案:

答案 0 :(得分:1)

我找到了答案,我只需在创建对象时扩展对象,如下所示:

object main extends App{
val z =  new c[b] with b
  z.p()
}

trait a{
  val x : String
}

trait b extends a {
  val x = "1"
}

class c[A <: a]{
  this: A =>
  def p(): Unit ={
    print(x)
  }
}