Companion object
Эта фишка позволяет создать объект без его объявления. Т.е. сразу
class Outer { companion object { fun hello() = println("hello from companion object") } } fun main() { Outer.hello() }
Не может быть конструктора, но может быть интерфейс. Его автоматичеаски реализует и класс.
Объект, который относится к классу в котором был создан.
Он всегда существует и его не обаятельно создавать самостоятельно. Все чалены не могут обращаться к классу Calc
class Calc { самостоятельно. Все челены не могут образаться к классу Calc companion object { //когда создаём переменную как val - она не public, а private и для нее содается создается public getter private const val PI = 3.14 fun square(num: Int) = num*num fun lengthOfCircle(radius: Float) = 2 * PI * radius } }
Это нужно чтобы не создавать отдельный объект.
В main мы бы создали объект
val calc = Calc() calc.square(4)
С Companion object можем сразу вызывать без миную создание объекта
Calc.square(4)
-Это аналог статики в джаве.
-Можно использовать для реализации фабрик по конструированию объектов
-Может реализовывать интерфейсы
-Может иметь имя. Может быть несколько штук.