Если вы можете переопределить var с помощью var, то переопределяющий элемент может иметь более узкий тип. (Вот как определяется переопределение.)
Затем вы можете присвоить значение более широкого типа, а затем прочитать его, ожидая более узкого типа, и сбой.
Иллюстрация сеттер вовлеченного:
scala> class A ; class B extends A
defined class A
defined class B
scala> abstract class C { var x: A } ; class D extends C { var x: B = _ }
<console>:13: error: class D needs to be abstract, since variable x in class C of type A is not defined
(Note that an abstract var requires a setter in addition to the getter)
abstract class C { var x: A } ; class D extends C { var x: B = _ }
^
scala> abstract class C { var x: A }
defined class C
scala> class D extends C { var x: B = _ ; def x_=(a: A) = ??? }
defined class D
Почему кто-то хочет «переопределить» 'var'? В чем смысл переопределения var? –
Потому что переопределение этого не имеет особого смысла. Он изменчив, вы можете просто изменить его.Что означает переопределение? http://stackoverflow.com/questions/16413986/how-to-override-a-mutable-variable-in-trait-in-scala – Falmarri
@Sarvesh: Спасибо за ваш быстрый ответ. Я просто пытаюсь понять, почему это разрешено для val? – mogli