Scala trait 和 class 继承树

Scala trait and class inheritence tree

我无法理解程序的输出。我不确定,为什么我得到我所做的输出。以下是涉及的classes/traits

class SuperClass {

  def superMethodFromClass() = {println("from super class")};

}

trait SuperTrait extends SuperClass{

  def superMethod():Unit={}
  override def superMethodFromClass() = {println("from super trait")};

}

class TestClass extends SuperClass with SuperTrait{

  def callSMFC() = superMethodFromClass()

}

当我在main方法中使用如下代码时:-

val testClass = new TestClass
    testClass.callSMFC

它打印 "from super trait"

谁能解释一下为什么会这样???

谢谢,

阿马尔

scala 编译器使用线性化将(多个特征)组合成 类。

您可以看到几个东西堆叠在一起的例子。您的 TestClass 继承自 SuperClass,然后 SuperTrait 堆叠在顶部。

当调用superMethodFromClass()时,第一个寻找实现的地方是TestClass本身,但是由于TestClass没有覆盖方法,编译器会首先在SuperTrait,因此您会看到打印了 "from super trait"

有关可堆叠特征模式的更多详细信息,请查看下面的 link https://code.sahebmotiani.com/patterns-in-scala-101-5d0fa70aaf3f