Конструктор

Конструктор в Kotlin представляет собой специальный блок кода, который вызывается при создании экземпляра класса с помощью оператора new. Конструктор выполняет инициализацию свойств класса и подготовку объекта к использованию. В Kotlin различают первичный и вторичные конструкторы.

Синтаксис первичного конструктора

kotlinclass ClassName constructor(param1: Type1, param2: Type2) {
  // тело класса
}
kotlinclass ClassName(param1: Type1, param2: Type2) {
  // тело класса
}

Синтаксис вторичного конструктора

kotlinclass ClassName {
  constructor(param1: Type1, param2: Type2) {
    // код конструктора
  }
}

Пример

Создадим класс Person с первичным конструктором, принимающим два параметра:

kotlinclass Person(val name: String, val age: Int)

val person = Person("John", 25)
println("Name: ${person.name}, Age: ${person.age}")

Результат выполнения кода:

kotlinString "Name: John, Age: 25"

Пример

Использование ключевого слова constructor явно в первичном конструкторе:

kotlinclass Person constructor(val name: String, val age: Int)

val person = Person("Alice", 30)
println("Name: ${person.name}, Age: ${person.age}")

Результат выполнения кода:

kotlinString "Name: Alice, Age: 30"

Пример

Класс с вторичным конструктором:

kotlinclass Person {
  var name: String = ""
  var age: Int = 0
  
  constructor(name: String, age: Int) {
    this.name = name
    this.age = age
  }
}

val person = Person("Bob", 35)
println("Name: ${person.name}, Age: ${person.age}")

Результат выполнения кода:

kotlinString "Name: Bob, Age: 35"

Пример

Класс с несколькими вторичными конструкторами:

kotlinclass Person {
  var name: String = ""
  var age: Int = 0
  var city: String = "Unknown"
  
  constructor(name: String, age: Int) {
    this.name = name
    this.age = age
  }
  
  constructor(name: String, age: Int, city: String) {
    this.name = name
    this.age = age
    this.city = city
  }
}

val person1 = Person("Charlie", 40)
val person2 = Person("Diana", 28, "New York")

println("Person1: ${person1.name}, ${person1.age}, ${person1.city}")
println("Person2: ${person2.name}, ${person2.age}, ${person2.city}")

Результат выполнения кода:

kotlinString "Person1: Charlie, 40, Unknown"
String "Person2: Diana, 28, New York"

Пример

Использование блока init для инициализации в первичном конструкторе:

kotlinclass Person(val name: String, val age: Int) {
  init {
    println("Person $name created with age $age")
  }
}

val person = Person("Eva", 32)

Результат выполнения кода:

kotlinString "Person Eva created with age 32"

Пример

Конструктор с модификаторами доступа:

kotlinclass Person private constructor(val name: String) {
  companion object {
    fun create(name: String): Person {
      return Person(name)
    }
  }
}

val person = Person.create("Frank")
println("Name: ${person.name}")

Результат выполнения кода:

kotlinString "Name: Frank"

Смотрите также

  • ключевое слово class,
    которое используется для объявления классов
  • ключевое слово init,
    которое используется для блоков инициализации
  • ключевое слово this,
    которое ссылается на текущий экземпляр класса
  • ключевое слово companion,
    которое используется для объявления companion object