Toda clase puede tener un companion object, que es un objeto que es común a todas las instancias de esa clase. Vendría a ser similar a los campos estáticos en Java.
Dentro de una clase no se puede crear mas de un companion object
class CompanionObject { private fun showCase1(){ //Normal Companion Object val value = MyClass1.flag MyClass1.welcome() } private fun showCase2(){ //Implementando Interfaz en Companion Object MyClass2.welcome() } fun showCases(){ showCase1() showCase2() } } class MyClass1{ companion object { val flag = 1 fun welcome(){ Log.w("COMPANION-OBJECT-1","Welcome from Companion Object!!") } } } class MyClass2{ companion object:Welcome { override fun welcome() { Log.w("COMPANION-OBJECT-2","Welcome from Companion Object + Interface!!") } } } interface Welcome{ fun welcome() }