I am getting confused in use of var and val in access modifers,
name is var , therefore we can change it, it is ok.
But p is val, how we are able to change the
p.name = \"Fred F
val or var works only for next variable (on it's reference), it does not indicate whether variable is mutable or not. In your example, p is mutable (because one can change p.name). But you cannot write p = anotherPerson.