Companion Object en Kotlin

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()
}