Case class is special type of class. You can class by prepending case keyword in class declaration. case class Person(id:Int, name: String) Object Creation: You do not need to use new keyword to create object of case class. object TestMe { def main(args: Array[String]): Unit = { val person = Person(1,"Prithvi") } } When you create case class, compiler generates apply method for constructor. When you create object, it internally calls apply method. Visibility of variables: If we don't specify visibility(var or val) in variable declaration, It will use val as by default. Since variable are declared as val, accessors will be generated for those variables but not mutators. Case classes are meant for immutability. Once object of case class is created, it should not be mutated. But we can make case class mutable by declaring variables as var but it will violate the intention of case class Boilerplate codes: As we have seen,...