我只是偶然发现了一些对我来说很奇怪的情况。无论如何,我可能很想念这个明显的问题,请帮助我。斯卡拉构造函数参数是否重复?
考虑下面的斯卡拉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的”一类X。 然后我定义了一个类Y,它应该接受一个构造函数参数并将它传递给它所做的X-。为了显示不同之处,我修改了“s”,然后将其赋予X(“我的”+ s)。
最后我创建一个新的Y并调用“run”。这将“fish”打印到控制台,因此显然类“X”的属性“s”已被我在“Y”中创建的新属性“s”遮蔽。
我试过这与Scala 2.8和2.9.1具有相同的结果。
这应该是这样吗?如果我只想将构造函数参数从我的类传递到超类,而不想将自己存储在子类中,该怎么办?这里常见的做法是什么?
谢谢!
谢谢你的详细解释! –
Y中的类参数隐藏了X中定义的val。 – mkneissl