Why are end variables in scala allowed to change values

Why are end variables in Scala allowed to change values. According to my understanding, declared final, they are not allowed to change.

class foo()
{
  final var name = "abc"
  name = "xyz" // why this is allowed
}
+4
source share
3 answers

finalScala definition Specification (emphasis mine):

5.2.6 final

. . . . , , , , . , , , , . , .

val Scala , ( Java), . , , final.

var " ", :

scala> :pa
// Entering paste mode (ctrl-D to finish)

class Foo {
  final var name = "abc"
}

class Bar extends Foo {
  override var name = "yuval"
}

// Exiting paste mode, now interpreting.

<console>:16: error: overriding variable name in class Foo of type String;
 variable name cannot override final member
             override var name = "yuval"
+5

final , Java.

Java , .

Scala final , , , val.

class Foo {
  val name: String = "abc"
  // name = "xyz" // would be a compilation error

  final var surname: String = "def"
  surname = "uvw" // ok
}

class Bar extends Foo {
  override val name: String = "xyz"
  override var surname: String = "rst" // compilation error
}
+10

final, , / .

class Fruit {
  val color = "Green"
}

class AmericanFruit extends Fruit {
  override val color = "Red"
}

.

final

, final,

final class

val . (val )

scala> val immutableName = "you can not change me"
immutableName: String = you can not change me

scala> immutableName = "change me"
<console>:12: error: reassignment to val
       immutableName = "change me"
            ^

mutable var (var )

scala> var mutableName = "you can change me"
mutableName: String = you can change me

scala> mutableName = "i am changed"
mutableName: String = i am changed
+1

Source: https://habr.com/ru/post/1669668/


All Articles