我很难理解我程序的输出。我不知道,为什么我得到了我所做的输出。以下是所涉及的类别/特征
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()
}当我在主方法中使用以下代码时:
val testClass = new TestClass
testClass.callSMFC它印出了“超级特质”
有人能解释一下为什么会这样吗?
谢谢,
阿马尔
发布于 2016-02-16 11:18:22
scala编译器使用线性化将(多个特征)组合成类。
你可以看到你的例子,几个东西是堆叠在一起的。您的TestClass继承自SuperClass,然后SuperTrait被堆放在顶部。
在调用superMethodFromClass()时,首先查找实现的是TestClass本身,但是由于TestClass没有覆盖该方法,编译器将首先在SuperTrait中查找,因此您将看到"from super trait"是打印出来的。
有关更多详细信息,请参阅下面有关可堆栈特性模式https://code.sahebmotiani.com/patterns-in-scala-101-5d0fa70aaf3f的链接。
https://stackoverflow.com/questions/35430632
复制相似问题