【问题标题】:Mixing a trait in a class在一个类中混合一个特征
【发布时间】:2018-04-14 06:04:43
【问题描述】:

来自“Scala 编程”第 12 章(关于特征):

加倍特性有两个有趣的事情发生。首先是它声明 一个超类,IntQueue。此声明意味着该 trait 只能是 混合到一个也扩展 IntQueue 的类中。因此,您可以混合加倍 进入 BasicIntQueue,但不进入 Rational。

但是我们可以让我们的类扩展任何类,然后使用 'with' 关键字来混合特征。

【问题讨论】:

  • 这里有问题吗?
  • 是的。书上的解释好像有点不对,还是我理解错了?

标签: scala traits


【解决方案1】:

但是我们可以让我们的类扩展任何类,然后使用 'with' 关键字混合特征。

不,你不能。如果您尝试使用此特征:

class X extends Rational with Doubling

你会得到一个错误,因为X 有两个超类:Rational 和来自DoublingIntQueue。书上是这么说的。

【讨论】:

    【解决方案2】:

    引用书中的这句话:

    这个声明意味着该特征只能是 混合到一个也扩展了 IntQueue 的类中。因此,您可以混合加倍 进入 BasicIntQueue ,但不进入 Rational 。您只能将 trait 与任何其他继承自混合 trait 的超类的类混合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2012-10-01
      • 2022-04-26
      • 1970-01-01
      相关资源
      最近更新 更多