В Kotlin классы могут иметь первичный конструктор и один или несколько вторичных конструкторов.
Первичный конструктор:
- Объявляется в заголовке класса:
kotlin
- Не имеет тела. Код инициализации выполняется в блоках
init.
- Свойства, объявленные в первичном конструкторе с
val или var, становятся свойствами класса.
- Можно использовать параметры конструктора в блоках
init и при инициализации свойств:
kotlin
- Если первичный конструктор не имеет аннотаций или модификаторов видимости, ключевое слово
constructor можно опустить.
Блоки init:
- Содержат код инициализации, который выполняется при создании экземпляра класса.
- Выполняются в том порядке, в котором они объявлены в классе.
- Запускаются после вызова первичного конструктора (если он есть), но до вызова вторичных конструкторов.
Вторичные конструкторы:
- Объявляются с ключевым словом
constructor.
- Могут делегировать вызов другому конструктору своего класса с помощью ключевого слова
this() или конструктору базового класса с помощью super(). Вызов делегации должен быть первой инструкцией.
kotlin
- Если класс имеет первичный конструктор, все вторичные конструкторы должны явно или косвенно делегировать ему вызов через
this().
Порядок инициализации:
- Выполнение кода первичного конструктора (если есть).
- Выполнение блоков
init в порядке их объявления.
- Выполнение кода вторичного конструктора (если используется).
Пример:
kotlin
Ключевые особенности: декларативный синтаксис первичного конструктора, использование блоков init для логики инициализации, явное делегирование в случае вторичных конструкторов для обеспечения согласованности создания объектов.