Konstruktor - bu sinf obyekti birinchi navbatda o'zgaruvchilar yoki xususiyatlarni ishga tushirish uchun yaratilganda chaqiriladigan maxsus a'zo funktsiyasi. Sinfda konstruktor bo'lishi kerak va agar biz konstruktorni e'lon qilmasak, kompilyator standart konstruktorni yaratadi.
Kotlin ikki turdagi konstruktorlarga ega:
- Asosiy konstruktor
- Ikkilamchi konstruktor
Kotlindagi sinf ko'pi bilan bitta asosiy konstruktorga va bir yoki bir nechta ikkinchi darajali konstruktorga ega bo'lishi mumkin. Birlamchi konstruktor sinfni ishga tushiradi, ikkinchi darajali konstruktor esa sinfni ishga tushirish va qo'shimcha mantiqni kiritish uchun ishlatiladi.
Asosiy konstruktor
Birlamchi konstruktor sinf sarlavhasida ishga tushiriladi, konstruktor kalit so'zidan foydalanib, sinf nomidan keyin keladi. Parametrlar asosiy konstruktorda ixtiyoriy.
class Add constructor(val a: Int, val b: Int) {
// kodlar
}
Konstruktor kalit so'zini izohlar yoki kirish modifikatorlari ko'rsatilmagan bo'lsa, o'tkazib yuborish mumkin.
class Add(val a: Int, val b: Int) {
// kodlar
}
Boshlang'ich konstruktorning Kotlin dasturi
fun main(args: Array<String>)
{
val add = Add(5, 6)
println("Ikki raqamning yig'indisi: ${add.c}")
}
class Add constructor(a: Int,b:Int)
{
var c = a+b;
}
Izoh: Biz sinf uchun add obyektini yaratganimizda, 5 va 6 qiymatlari konstruktorga o'tadi. Konstruktor parametrlari a va b mos ravishda 5 va 6 parametrlari bilan ishga tushiriladi. Mahalliy o'zgaruvchi c o'zgaruvchilar yig'indisini o'z ichiga oladi. Asosiysi, biz ${add.c} yordamida konstruktor xususiyatiga kiramiz.
Boshlovchi blokli asosiy konstruktor
Birlamchi konstruktor hech qanday kodni o'z ichiga olmaydi, ishga tushirish kodi init kalit so'zi bilan prefikslangan alohida initsializator blokiga joylashtirilishi mumkin.
Boshlovchi blokli birlamchi konstruktorning Kotlin dasturi
init bloki nima?
U a'zo o'zgaruvchilar ishga tushiriladigan boshlang'ich blok vazifasini bajaradi. Bu sinfning namunasi yaratilganda bu blok bajariladi. Bir nechta init bloklari bo'lishi mumkin va ular sinf ichida yozilgan tartibda chaqiriladi.
Eslatma: init bloklari ushbu sinf konstruktori chaqirilishidan oldin chaqiriladi.
fun main(args: Array<String>) {
val person = Person("Uzbekdevs")
}
class Person {
constructor(name : String){
println("Bu birinchi boshlang'ich blok")
}
init{
println("Bu ikkinchi boshlang'ich blok")
}
init{
println("Bu uchinchi boshlang'ich blok")
}
init{
println("Bu asosiy konstruktor")
}
}
Izoh: Shaxs klassi uchun obyekt shaxsi yaratilganda, "Uzbekdevs" qiymati konstruktor parametrlari nomiga o'tadi. Sinf id va nomda ikkita xususiyat e'lon qilinadi. Initializer bloki obyektni yaratish vaqtida bajariladi va nafaqat xususiyatlarni ishga tushiradi, balki standart chiqishga ham chop etadi.
Asosiy konstruktordagi standart qiymat
Funktsiyalardagi funksiyalarning standart qiymatlariga o'xshab, biz konstruktor parametrlarini ba'zi bir standart qiymatlar bilan ishga tushirishimiz mumkin.
Birlamchi konstruktorda standart qiymatlarning Kotlin dasturi
fun main(args: Array<String>) {
val emp = employee(18018, "Uzbekdevs")
val emp2 = employee(11011)
val emp3 = employee()
}
class employee(emp_id : Int = 100 , emp_name: String = "abc") {
val id: Int
var name: String
init {
id = emp_id
name = emp_name
print("Xodim identifikatori: $id, ")
println("Xodimning ismi: $name")
println()
}
}
Izoh: Bu yerda biz konstruktor parametrlarini ba'zi bir sukut bo'yicha emp_id = 100 va emp_name = "abc" bilan ishga tushirdik. Obyekt emp yaratilganda biz ikkala parametr uchun qiymatlarni o'tkazdik, shuning uchun u ushbu qiymatlarni chop etadi. Biroq, emp2 obyektini yaratish vaqtida biz emp_name dan o'tmaganmiz, shuning uchun initsializer bloki standart qiymatlardan foydalanadi va standart chiqishga chop etadi.
Ikkilamchi konstruktor
Yuqorida aytib o'tilganidek, Kotlin bir yoki bir nechta ikkinchi darajali konstruktorlarga ega bo'lishi mumkin. Ikkilamchi konstruktorlar o'zgaruvchilarni ishga tushirishga imkon beradi va sinfga mantiqiy ma'lumotlarni taqdim etishga imkon beradi. Ular konstruktor kalit so'zi bilan prefikslangan.
Ikkilamchi konstruktorni amalga oshirish uchun Kotlin dasturi
fun main(args: Array<String>)
{
Add(5, 6)
}
class Add
{
constructor(a: Int, b:Int)
{
var c = a + b
println("5 va 6 raqamlarining yig'indisi: ${c}")
}
}
Qaysi ikkilamchi konstruktor chaqirilishini kompilyator qabul qilingan argumentlar asosida hal qiladi. Yuqoridagi dasturda biz qaysi konstruktor va kompilyatorning o'zi qaror qilishini chaqirishni belgilamaymiz.
Sinfdagi ikkita ikkinchi darajali konstruktorlarning Kotlin dasturi
fun main(args: Array<String>) {
employee(18018, "Sherzod")
employee(11011,"Uzbekdevs",600000.5)
}
class employee {
constructor (emp_id : Int, emp_name: String ) {
var id: Int = emp_id
var name: String = emp_name
print("Xodim identifikatori: $id, ")
println("Xodimning ismi: $name")
println()
}
constructor (emp_id : Int, emp_name: String ,emp_salary : Double) {
var id: Int = emp_id
var name: String = emp_name
var salary : Double = emp_salary
print("Xodim identifikatori: $id, ")
print("Xodimning ismi: $name, ")
println("Xodimning ismi: $salary")
}
}
Bir sinfdagi uchta ikkinchi darajali konstruktorning Kotlin dasturi
fun main(args: Array<String>)
{
Add(5, 6)
Add(5, 6, 7)
Add(5, 6, 7, 8)
}
class Add
{
constructor(a: Int, b: Int)
{
var c = a + b
println("5+6 = ${c}")
}
constructor(a: Int, b: Int, c: Int)
{
var d = a + b + c
println("5+6+7 = ${d}")
}
constructor(a: Int, b: Int, c: Int, d: Int)
{
var e = a + b + c + d
println("5+6+7+8 = ${e}")
}
}
Bir ikkinchi darajali konstruktorni boshqasidan chaqirish
Ikkilamchi konstruktor this() funksiyasidan foydalanib, xuddi shu sinfdagi boshqa ikkinchi darajali konstruktorni chaqirishi mumkin. Quyidagi dasturda biz this(a,b,7) yordamida boshqa konstruktorni chaqirdik, chunki bu konstruktorni chaqirish uchta parametrni talab qiladi.
Bir konstruktorni boshqasidan chaqirish uchun Kotlin dasturi
fun main(args: Array<String>)
{
Add(5,6)
}
class Add {
constructor(a: Int,b:Int) : this(a,b,7) {
var sumOfTwo = a + b
println("5+6=$sumOfTwo")
}
constructor(a: Int, b: Int,c: Int) {
var sumOfThree = a + b + c
println("5+6+7=$sumOfThree")
}
}
Bolalar sinfining ikkinchi darajali konstruktoridan ota-ona sinfining ikkinchi darajali konstruktorini chaqirish
Biz super kalit so'zdan foydalanib, ota-klassning ikkinchi darajali konstruktorini bolalar sinfidan chaqirishimiz mumkin. Quyidagi dasturda biz qo'ng'iroq qilish jarayonini ko'rsatdik.
fun main(args: Array<String>) {
Child(18018, "Sherzod")
}
open class Parent {
constructor (emp_id: Int, emp_name: String, emp_salary: Double) {
var id: Int = emp_id
var name: String = emp_name
var salary : Double = emp_salary
println("Xodim identifikatori: $id")
println("Xodimning ismi: $name")
println("xodimning maoshi: $salary")
println()
}
}
class Child : Parent {
constructor (emp_id : Int, emp_name: String):super(emp_id,emp_name,500000.55){
var id: Int = emp_id
var name: String = emp_name
println("Xodimning identifikatori: $id")
println("Xodimning ismi: $name")
}
}