【发布时间】:2011-09-06 18:00:46
【问题描述】:
我只是偶然发现了一些对我来说很奇怪的情况。我很可能在这里遗漏了明显的东西-无论如何,请帮助我。
考虑以下 Scala repl 脚本:
scala> class X(val s: String) { def run=println("(X): "+s) }
defined class X
scala> class Y(s: String) extends X("MY "+s) { override def run=println("(Y): "+s) }
defined class Y
scala> new Y("fish").run
(Y): fish
在脚本中,我定义了一个带有类属性“val s”的类 X。 然后我定义了一个类 Y,它应该接受一个构造函数参数并将其传递给 X- 它确实如此。为了显示差异,我在给 X 之前修改了“s”(“MY”+s)。
最后我创建了一个新的 Y 并调用“运行”。这会将“fish”打印到控制台,因此显然“X”类的属性“s”已被我在“Y”中创建的新属性“s”所遮蔽。
我在 Scala 2.8 和 2.9.1 上尝试过,结果相同。
应该是这样吗?如果我只想将构造函数参数从我的类传递到超类并且不想自己将参数存储在子类中,该怎么办?这里的常见做法是什么?
谢谢!
【问题讨论】:
标签: scala