Конструктор
Конструктор в Kotlin представляет собой специальный блок кода,
который вызывается при создании экземпляра класса с помощью
оператора new
. Конструктор выполняет инициализацию
свойств класса и подготовку объекта к использованию.
В Kotlin различают первичный и вторичные конструкторы.
Синтаксис первичного конструктора
class ClassName constructor(param1: Type1, param2: Type2) {
// тело класса
}
class ClassName(param1: Type1, param2: Type2) {
// тело класса
}
Синтаксис вторичного конструктора
class ClassName {
constructor(param1: Type1, param2: Type2) {
// код конструктора
}
}
Пример
Создадим класс Person
с первичным конструктором,
принимающим два параметра:
class Person(val name: String, val age: Int)
val person = Person("John", 25)
println("Name: ${person.name}, Age: ${person.age}")
Результат выполнения кода:
String "Name: John, Age: 25"
Пример
Использование ключевого слова constructor
явно в первичном конструкторе:
class Person constructor(val name: String, val age: Int)
val person = Person("Alice", 30)
println("Name: ${person.name}, Age: ${person.age}")
Результат выполнения кода:
String "Name: Alice, Age: 30"
Пример
Класс с вторичным конструктором:
class 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}")
Результат выполнения кода:
String "Name: Bob, Age: 35"
Пример
Класс с несколькими вторичными конструкторами:
class 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}")
Результат выполнения кода:
String "Person1: Charlie, 40, Unknown"
String "Person2: Diana, 28, New York"
Пример
Использование блока init
для инициализации
в первичном конструкторе:
class Person(val name: String, val age: Int) {
init {
println("Person $name created with age $age")
}
}
val person = Person("Eva", 32)
Результат выполнения кода:
String "Person Eva created with age 32"
Пример
Конструктор с модификаторами доступа:
class 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}")
Результат выполнения кода:
String "Name: Frank"