我无法理解程序的输出。我不确定,为什么我得到了我的输出。以下是涉及的课程/特征
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
它打印"来自超级特质"
有人可以解释为什么会这样吗???
谢谢,
阿玛尔
答案 0 :(得分:0)
scala编译器使用线性化将(多个特征)组合到类中。
你可以看到你的几个东西堆叠在一起的例子。您的TestClass
继承自SuperClass
,然后SuperTrait
位于顶部。
调用superMethodFromClass()
时,查找实现的第一个位置是TestClass
本身,但是由于TestClass
没有覆盖该方法,编译器将首先查看{{1}因此,您会看到SuperTrait
已打印出来。
有关详细信息,请查看以下有关可堆叠特征模式的链接 https://code.sahebmotiani.com/patterns-in-scala-101-5d0fa70aaf3f