Let's say I have an
object Error{
abstract class Reason{def p:P}
case class A(p:P) extends Reason
case class B(p:P) extends Reason
...
}
And that now I want to add a special case of B:
object Error{
abstract class Reason{def p:P}
case class A(p:P) extends Reason
class B(val p:P) extends Reason{
def apply(p:P) = new B(p)
def unappply(b:B) =
if(b == null) None
else Some(b.p)
}
case class SpecialB(override val p:P) extends B(p)
...
}
In this change, why must I declare parameter p in B as val and why didn't I have to when B was a case class?