Я только что наткнулся на какую-то ситуацию, которая кажется мне странной.Я вполне мог бы упустить очевидное здесь - в любом случае, пожалуйста, помогите мне.
Рассмотрим следующий скрипт 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
В этом скрипте я определяю класс X сатрибут класса "val s".Затем я определяю класс Y, который должен принимать один аргумент конструктора и передавать его в X-, что он и делает.Чтобы показать разницу, я изменяю «s» перед тем, как передать его X («MY» + s).
Наконец, я создаю новый Y и вызываю «run».Это выводит «fish» на консоль, поэтому очевидно, что атрибут «s» класса «X» был затенен новым атрибутом «s», который я создал в «Y».
Я пробовал это в Scala 2.8и 2.9.1 с тем же результатом.
Это должно быть так?Что мне делать, если я просто хочу передать аргументы конструктора из моего класса в суперкласс и не хочу сам сохранять параметр внутри дочернего класса?Какова общая практика здесь?
Спасибо!