首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala特性和类继承树

Scala特性和类继承树
EN

Stack Overflow用户
提问于 2016-02-16 10:56:17
回答 1查看 121关注 0票数 0

我很难理解我程序的输出。我不知道,为什么我得到了我所做的输出。以下是所涉及的类别/特征

代码语言:javascript
复制
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()

}

当我在主方法中使用以下代码时:

代码语言:javascript
复制
val testClass = new TestClass
    testClass.callSMFC

它印出了“超级特质”

有人能解释一下为什么会这样吗?

谢谢,

阿马尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35430632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档