I'd like override one mutable variable in Trait in constructor. But it will complain that "overriding variable a in trait A of type Int; variable a cannot override a mutable variable". Why the scala do not allow me do that ? And any best practise for this ? Thanks
trait A{
var a:Int = _
}
class B(override var a:Int) extends A
In scala, you can override only those variables which are declared by using val keyword in both classes.
override var description:String =”It is a square.” It is the same example as above but here errors are found as here, var is used in the sub-classes to override the fields which is not possible as val cannot be overridden by the var as stated above.
By contrast, Scala has two types of variables: val creates an immutable variable (like final in Java) var creates a mutable variable.
You cannot override it (for reasons that don't reveal themselves to me right now, except, that vars can be modified anyway so why override them), but you can leave the declared variable uninitialised and delegate the latter to B
:
trait A {
var a: Int
}
class B(var a: Int) extends A
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With