Когда вы используете ключевое слово var
в параметрах, это делает переданное значение новым var
в классе. Когда вы этого не делаете, это делает его параметром конструктора (только), и вы используете его значение для var
, передавая его конструктору. Итак, пример, который люди привели
class B(val name:String, updateCount:Int) extends A(updateCount)
правильно.
Однако scala делает параметры конструктора непосредственно доступными для методов в классе (я не уверен почему), поэтому, если вы используете то же имя, вы обнаружите, что ваш код не может скомпилироваться с ошибкой reassignment to val
, когда попробуйте переназначить "var". Например, в следующем фрагменте неизменяемый параметр конструктора затеняет унаследованный var
, поэтому вы не можете назначить этому параметру.
class B (val name: String, updateCount: Int) extends A(updateCount) {
def inc(): Unit = {
updateCount = updateCount + 1
}
}