我只是偶然發現了一些對我來說很奇怪的情況。無論如何,我可能很想念這個明顯的問題,請幫助我。斯卡拉構造函數參數是否重複?
考慮下面的斯卡拉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