Frequently, we can skip the type declaration on our variable or property. Kotlin
will infer the generic type based on the value we use to initialize
the variable or property. Here, we are using mutableListOf() to create
a MutableList of objects — a MutableList allows us to change its contents
after initialization.
If critters in this sample were initialized as:
val critters = mutableListOf(Frog(), Axolotl())
...then Kotlin would see that both of these objects share Animal as a common
base type, so critters would be treated as a MutableList<Animal>.
However, the list we are using in this snippet also has a String when
we initialize it. The
common base type for Frog, Axoltl, and String is Any, the overall
base class for all Kotlin classes. So, Kotlin will treat critters as a
MutableList<Any>.