Scala 无miixn遗传性状的访问方法

Scala 无miixn遗传性状的访问方法,scala,inheritance,Scala,Inheritance,假设我有这样一个案例: object Sample02 { trait A { def lit = "a" } trait B extends A { def add = lit + " + " + lit } trait C extends A { def sub = lit + " - " + lit } def main(args: Array[String]) { class BA extends B class

假设我有这样一个案例:

object Sample02 {

  trait A {
    def lit = "a"
  }

  trait B extends A {
    def add = lit + " + " + lit
  }

  trait C extends A {
    def sub = lit + " - " + lit
  }

  def main(args: Array[String]) {
    class BA extends B
    class CA extends C

    val ba = new BA
    val ca = new CA
我试过这个:

    val ls = List(ba, ca)

    for (l <- ls)
      println(l.lit) //here i can't call "add" and "sub" methods

我关心的是,我是否可以避免“菱形”继承,以便访问三个类中的所有方法——更具体地说:没有mixin特征,但使用类?

List(ba,ca)
是一个
List[a]
,但是如果列表中的类型有它们,您想访问
B
C
的方法吗?或者什么?我在列表中列出了这两个实例,我可以通过只使用一个标识符来访问它们的方法
l
——所以忽略我的
trued
部分。我想举例说明mixin最后提供了什么:
类BC用C扩展了B
在这里你真的没有选择,只能混合这两种特性。编译器需要能够证明对象既是
B
又是
C
,才能访问这些方法。你有什么理由不想把这两种性格混在一起,比如两者之间有明显的冲突吗?@m-z,其中一个原因是,我有一些特性不会覆盖同名的方法,每当我混合这些特性时,我需要在它们上面添加另一个特性,或者告诉它们相互覆盖,它们被覆盖的顺序也很重要。我想对混合了它们的课程做点什么:(
    class BC extends B with C
    val bc = new BC
    bc.lit
    bc.add
    bc.sub
  }
}