В чем разница между конструкторами класса в Java и Kotlin

«В чем разница между конструкторами класса в Java и Kotlin» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java конструкторы объявляются как методы с именем класса, могут быть перегружены. В Kotlin используется ключевое слово constructor, но его можно опустить, если нет модификаторов доступа или аннотаций.

Основные отличия:

  1. В Kotlin primary конструктор объявляется в заголовке класса:
class Person(val name: String, var age: Int)
  1. Secondary конструкторы вызывают primary через this():
class Person(val name: String) {
    constructor(name: String, age: Int) : this(name) { /*...*/ }
}
  1. В Kotlin инициализация в primary конструкторе выполняется в блоке init

  2. Kotlin автоматически генерирует getters/setters для свойств, объявленных в конструкторе с val/var

  3. В Kotlin параметры конструктора могут иметь значения по умолчанию