Companion Object

Classes and Objects can have the same name. The object is called a ‘Companion Object’. We commonly use Companion Objects for Factories.

Define

class Employee(val name:String, var age: Int){
  override def toString(): String = "Name: %s, Age: %s".format(this.name, this.age)
}

object Employee{

  def apply(name: String, age: Int): Employee = new Employee(name, age)
}

Usage

Then the new can be removed when creating an instance

object CompanionObject extends App{
  val p1 = Employee("Robin", 25)
  val p2 = Employee("Lin", 29)

  println(p1)
  println(p2)

}

Output

Name: Robin, Age: 25
Name: Lin, Age: 29