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
我无法理解程序的输出。我不确定,为什么我得到我所做的输出。以下是涉及的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