Конструкторы в Kotlin — первичный и вторичный

В Kotlin конструктор — это блок кода, аналогичный методу. Конструктор объявляется с тем же именем, что и класс, за которым следует скобка ‘()’. Конструктор используется для инициализации переменных во время создания объекта.

Типы конструкторов Kotlin

В Kotlin есть два типа конструкторов:

  1. Основной конструктор
  2. Вторичный конструктор

В классе 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 

Оцените статью