【发布时间】:2019-11-16 16:35:22
【问题描述】:
我阅读了 section 的 Programming in Scala,其中介绍了 abstract override,但我仍然对这些修饰符的加入究竟意味着什么感到困惑。使用这些修饰符的代码的 sn-p 粘贴在下面:
trait Doubling extends IntQueue {
abstract override def put(x: Int) { super.put(2 * x) }
}
特别是,我很困惑abstract 在这种情况下的用途,以及为什么我们不能简单地使用override 关键字来达到预期的结果。如果我们不包括对super 的调用,我们是否需要关键字abstract?为什么或者为什么不?我正在寻找这个关键字组合的详细解释,因为它与可堆叠特征有关。
【问题讨论】:
-
spec says: "请注意,抽象覆盖修饰符组合不会影响成员是具体的还是抽象的概念。如果只给它一个声明,它就是抽象的;它是具体的如果给出了完整的定义。”抽象
abstract override值成员的用例是什么?它当然不是指超级,它没有初始化程序(或主体,如果是方法)。它与只是一个抽象的覆盖成员有什么不同,省略了abstract?