В Kotlin конструктор — это блок кода, аналогичный методу. Конструктор объявляется с тем же именем, что и класс, за которым следует скобка ‘()’. Конструктор используется для инициализации переменных во время создания объекта.
Типы конструкторов Kotlin
В Kotlin есть два типа конструкторов:
- Основной конструктор
- Вторичный конструктор
В классе Kotlin есть только один первичный конструктор, тогда как вторичных конструкторов может быть один или несколько.
Основной конструктор
Первичный конструктор в Котлин используется для инициализации класса. Он объявлен в заголовке класса. Код основного конструктора заключен в круглые скобки с необязательным параметром.
Давайте посмотрим на пример объявления первичного конструктора. В приведенном ниже коде мы объявляем конструктор myClass с двумя именами параметров и идентификатором. Имя параметра является свойством только для чтения, тогда как id является свойством для чтения и записи.
class myClass(valname: String,varid: Int) {
// class body
}
Когда создается объект myClasss, он инициализирует имя и идентификатор с помощью «Ashu» и «101» соответственно.
class myClass(val name: String, var id: Int) {
}
fun main(args: Array){
val myclass = myClass("Ashu", 101)
println("Name = ${ myclass.name}")
println("Id = ${ myclass.id}")
}
Выход:
Name = Ashu Id = 101
Первичный конструктор с блоком инициализатора
Первичный конструктор не содержит никакого кода. Блоки инициализатора используются для инициализации кода. Этот блок начинается с ключевого слова init. В период инициализации экземпляра инициализированные блоки выполняются в том же порядке, в котором они появляются в теле класса.
Давайте перепишем приведенный выше код, используя блок инициализации:
class myClass(name: String, id: Int) {
val e_name: String
var e_id: Int
init{
e_name = name.capitalize()
e_id = id
println("Name = ${e_name}")
println("Id = ${e_id}")
}
}
fun main(args: Array){
val myclass = myClass("Ashu", 101)
}
Выход:
Name = Ashu Id = 101
В приведенном выше коде параметры name и id принимают значения «Ashu» и «101» при создании объекта myclass. Имя и идентификатор свойств используются без «val» или «var», поэтому они не являются свойствами класса myClass.
Когда создается объект класса myClass, он выполняет блок инициализации, который инициализирует se_name и e_id.
Вторичный конструктор Kotlin
В Kotlin вторичный конструктор может быть создан один или несколько в классе. Вторичный конструктор создается с использованием ключевого слова «constructor».
Давайте посмотрим на пример объявления вторичного конструктора. В приведенном ниже коде мы объявляем два конструктора myClass с двумя именами параметров и идентификатором.
class myClass{
constructor(id: Int){
//code
}
constructor(name: String, id: Int){
//code
}
}
Давайте посмотрим на пример вторичного конструктора, присваивающего значение при создании объекта класса.
class myClass{
constructor(name: String, id: Int){
println("Name = ${name}")
println("Id = ${id}")
}
}
fun main(args: Array){
val myclass = myClass("Ashu", 101)
}
Выход:
Name = Ashu Id = 101
Мы также можем использовать как первичный, так и вторичный конструктор в одном классе. Используя первичный и вторичный конструктор в том же классе, вторичный конструктор должен авторизоваться в первичном конструкторе. Авторизация в другом конструкторе того же класса осуществляется с помощью ключевого слова this().
Пример:
class myClass(password: String){
constructor(name: String, id: Int, password: String): this(password){
println("Name = ${name}")
println("Id = ${id}")
println("Password = ${password}")
}
}
fun main(args: Array){
val myclass = myClass("Ashu", 101, "mypassword")
}
Выход:
Name = Ashu Id = 101 Password = mypassword
Вызов одного вторичного конструктора из другого того же класса
В Kotlin один вторичный конструктор может вызывать другой вторичный конструктор того же класса. Это делается с помощью ключевого слова this().
Пример:
class myClass{
constructor(name: String, id: Int): this(name,id, "mypassword"){
println("this executes next")
println("Name = ${name}")
println("Id = ${id}")
}
constructor(name: String, id: Int,pass: String){
println("this executes first")
println("Name = ${name}")
println("Id = ${id}")
println("Password = ${pass}")
}
}
fun main(args: Array){
val myclass = myClass("Ashu", 101)
}
Выход:
this executes first Name = Ashu Id = 101 Password = mypassword this executes next Name = Ashu Id = 101
Вызов вторичного конструктора суперкласса из вторичного конструктора производного класса
В Kotlin один вторичный конструктор производного класса может вызывать вторичный конструктор базового класса. Это делается с помощью ключевого слова super, это концепция наследования.
open class Parent{
constructor(name: String, id: Int){
println("this executes first")
println("Name = ${name}")
println("Id = ${id}")
}
constructor(name: String, id: Int,pass: String){
println("this executes third")
println("Name = ${name}")
println("Id = ${id}")
println("Password = ${pass}")
}
}
class Child: Parent{
constructor(name: String, id: Int): super(name,id){
println("this executes second")
println("Name = ${name}")
println("Id = ${id}")
}
constructor(name: String, id: Int,pass: String):super(name,id,"password"){
println("this executes forth")
println("Name = ${name}")
println("Id = ${id}")
println("Password = ${pass}")
}
}
fun main(args: Array){
val obj1 = Child("Ashu", 101)
val obj2 = Child("Ashu", 101,"mypassword")
}
Выход:
this executes first Name = Ashu Id = 101 this executes second Name = Ashu Id = 101 this executes third Name = Ashu Id = 101 Password = password this executes forth Name = Ashu Id = 101 Password = mypassword
