Object

https://kotlinlang.org/docs/object-declarations.html

object

Одновременно объявляет класс и его экземпляр. Singleton. Инициализируется один раз при первом обращении. Другое назначение - анонимный класс.

data object

Объект с чистым представлением toString.

object MyObject

data object MyDataObject

fun main() {
    println(MyObject) // org.example.MyObject@1f32e575
    println(MyDataObject) // MyDataObject
}

companion object

Object, объявленный внутри класса. Функции такого объекта можно вызывать через класс. companion object отличается тем, что инициализируется в момент загрузки своего родительского класса, анонимные объекты инициализируются сразу же где используются, а обычные object лениво при первом доступе.

Анонимный объект

Объекты анонимных классов которые явно не объявлены с помощью class полезны для одноразового использования. Можно объявить их с нуля, наследовать от существующих классов или реализовать интерфейсы.

val helloWorld: Any = object {
    val hello = "Hello"
    val world = "World"
    
    // тип анонимных объектов - Any, поэтому `override` необходим в `toString()`
    override fun toString() = "$hello $world"
}

binding.root.setOnClickListener(object: View.OnClickListener {
    override fun onClick(v: View?) {
        // perform click
    }
})

Kotlin Object. Вопросы на собесе
  1. Зачем нужен companion object?
  1. Когда инициализируется companion object?
  1. Можно ли наследоваться от object?