A Companion object is an object that carries the Same name of the class it is supporting. In this example we have used Companion object to implement a Factory Object to instantiate the class Subject without the need to use new keyword #107
scala> :paste
// Entering paste mode (ctrl-D to finish)
class Subjects{
private var subjectList:List[String] = Nil
def addSubject(subject:String):Unit = {
subjectList = subject :: subjectList
}
def getSubjects():List[String] = subjectList
}
object Subjects{
def apply():Subjects = new Subjects()
}
// Exiting paste mode, now interpreting.
defined class Subjects
defined module Subjects
scala> // No need to use 'new' here...
scala> val subjects = Subjects()
subjects: Subjects = Subjects@385e9564
scala> subjects.addSubject("math")
scala> subjects.addSubject("Science")
scala> subjects.getSubjects()
res2: List[String] = List(Science, math)