Se è possibile eseguire l'override di una var con una var, il membro che esegue l'override potrebbe avere un tipo più ristretto. (Ecco come viene definito l'override.)
Si può quindi assegnare un valore di un tipo più ampio e quindi leggerlo aspettandosi il tipo più stretto e fallire.
Illustrazione del setter coinvolti:
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
fonte
2015-07-14 08:11:24
Perché qualcuno dovrebbe voler "scavalcare" un 'var'? Qual è il significato di sovrascrivere una var? –
Perché ignorare non ha molto senso. È mutabile, puoi solo cambiarlo.Cosa significa sovrascrivere? http://stackoverflow.com/questions/16413986/how-to-override-a-mutable-variable-in-trait-in-scala – Falmarri
@Sarvesh: Grazie per la tua rapida risposta. Sto solo cercando di capire, perché è permesso per val? – mogli