inheritance - Scala - val parameters -


this question has answer here:

let's have

object error{     abstract class reason{def p:p}     case class a(p:p) extends reason     case class b(p:p) extends reason     ... } 

and want add 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 change, why must declare parameter p in b val , why didn't have when b case class?

all parameters of case class constructor exposed public values, not case plain class, val must used make parameter public.


Comments