Scala特征和类继承树

时间:2016-02-16 10:56:17

标签: scala inheritance 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

它打印"来自超级特质"

有人可以解释为什么会这样吗???

谢谢,

阿玛尔

1 个答案:

答案 0 :(得分:0)

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

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

调用superMethodFromClass()时,查找实现的第一个位置是TestClass本身,但是由于TestClass没有覆盖该方法,编译器将首先查看{{1}因此,您会看到SuperTrait已打印出来。

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