- A Class can also take Class Parameters (ie...name, mark); using which a Primary Constructor with the same no of argument is created(by the Compiler)
- Any code that is not a Field or a Method becomes part of Primary Constructor
scala> class Subject(var name: String, mark: Int) {
| //Specify Precondition for the Primary Constructor
| require(mark >= 0)
| // Override an existing Method
| override def toString() =
| name + ", " + mark
| }
defined class Subject
scala> val subject = new Subject("math", 80)
subject: Subject = math, 80
scala> //Class Parameters that are part of Primary Constructor is
scala> //not available to outside world
scala> println("name -> " + subject.name)
<console>:10: error: value name is not a member of Subject
println("name -> " + subject.name)
^
scala> //Checking Precondition...
scala> val subject = new Subject("science", -1)
java.lang.IllegalArgumentException: requirement failed
at scala.Predef$.require(Predef.scala:221)
at Subject.<init>(<console>:9)