Well... an object
in Scala
can be "roughly"
explained as an instance of an anonymous class
. Now the difference in a case object
and object
lies in the difference of that anonymous class
being a case class
or just a class
To put it more clearly,
object A
// is roughly equivalent to something like
class AnonymousClass12345
val A = new AnonymousClass12345()
Where as for case object
,
case object A
// is roughly equivalent to something like,
case class AnonymousClass12345
val A = new AnonymousClass12345()
And now it should be very easy to relate to case class
vs class
. And as an instance of an anonymous case class
, case object
gets all the goodies that any instance of any other case class
does.
Note :: This answer is meant to provide an inaccurate but easy to understand explanation. A more accurate answer of this question will require not only an understanding of the difference class vs type
which is nicely (but not very accurately) discussed in this - answer but also of Scala reflection.