Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to override a mutable variable in Trait in scala?

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
like image 570
zjffdu Avatar asked May 07 '13 07:05

zjffdu


People also ask

How do you override a variable in Scala?

In scala, you can override only those variables which are declared by using val keyword in both classes.

Can Val be overridden?

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.

Is variable mutable in Scala?

By contrast, Scala has two types of variables: val creates an immutable variable (like final in Java) var creates a mutable variable.


1 Answers

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
like image 53
Malte Schwerhoff Avatar answered Oct 10 '22 18:10

Malte Schwerhoff