Overview

We have seen how we can create singletons and companion objects using object. In this notebook we introduce more things we can do with object.

More on Scala object

An object can extend one class. However, it can extend one or more traits [1]. This results in an object that has all of the features specified in the object definition [1]. One utilization of this pattern is to specify default objects as shown below.

abstract class Element(val idx: Int){
    def nFaces: Int;
    def nVertices: Int;
}
defined class Element
object DummyElement extends Element(-1){
    override def nFaces: Int = -1
    override def nVertices: Int = -1
}
defined object DummyElement

Whenever we want to use an Element that makes no sense but anyway it is needed we can use DummyElement.

Application objects

Just like Java and C++, a Scala application starts with a main method which has the following signature [1]

def main(args: Array[String]): Unit

We can wrap that in a companion object

class Hello{
    def showMsg() = println("Hello...")
}

object Hello{
    def main(args: Array[String]){
        
        val msg = new Hello
        msg.showMsg()
    }
}
defined class Hello
defined object Hello

Note that we can also extend the App trait and place the program code into the constructor body [1].

References

  1. Cay Horstmann, Scala for the Impatient 1st Edition