Middle
Kotlin-də konstruktorlar və obyektlərin ilkinləşdirilməsi ilə işləməyin xüsusiyyətləri nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Kotlin-də sinflər birincil konstruktor və bir və ya daha çox ikincil konstruktorlara malik ola bilər.
Birincil konstruktor:
- Sinfinin başlığında elan edilir:
class User(val name: String, var age: Int = 0) { // sinf gövdesi } - Tənha deyil. İbtidai qurğulama kodu
initbloklarında icra olunur. valvə yavarilə elan olunan xüsusiyyətlər sinifin xüsusiyyətlərinə çevrilir.- Konstruktor parametrlərindən
initbloklarında və xüsusiyyətlərin qurulmasında istifadə etmək olar:init { println("İstifadəçi başlanğıcı $name") } val description = "İstifadəçi: $name, yaş: $age" - Əgər birincil konstruktor heç bir şərh və ya görünüş modifikatoru yoxdursa,
constructorsözünü atlamaq olar.
init blokları:
- Sinif nümunəsi yaradılarkən icra olunan başlanğıc kodlarını ehtiva edir.
- Sinifdə elan olunduğu ardıcıllıqla icra olunur.
- Əgər varsa, birincil konstruktor çağırışından sonra, lakin ikincil konstruktorlardan əvvəl icra olunur.
İkincil konstruktorlar:
constructorsözü ilə elan edilir.this()istifadə edərək öz sinfində başqa bir konstruktoru çağırışa və yasuper()istifadə edərək əsas sinfin konstruktoruna delegasiya edə bilər. Delegasiya çağırışı ilk əməliyyat olmalıdır.class User(val name: String) { constructor(name: String, age: Int) : this(name) { println("İkincil konstruktor") // əlavə qurğulama loqikası } }- Əgər sinifdə birincil konstruktor varsa, bütün ikincil konstruktorlar açıq və ya qapalı şəkildə ona
this()ilə delegasiya etməlidir.
İnitializasiya ardıcıllığı:
- Birincil konstruktorun kodunun icrası (əgər varsa).
initbloklarının ardıcıllıqla icrası.- İkincil konstruktorun kodunun icrası (əgər istifadə olunursa).
Nümunə:
class Example(name: String) {
init {
println("$name üçün ilk init bloku")
}
val property1 = "Xüsusiyyət 1"
init {
println("$name üçün ikinci init bloku")
}
constructor(name: String, age: Int) : this(name) {
println("$name üçün ikincil konstruktor, yaş: $age")
}
}
fun main() {
val ex1 = Example("İstifadəçi1") // Çıxış: $name üçün ilk init bloku, $name üçün ikinci init bloku
val ex2 = Example("İstifadəçi2", 30) // Çıxış: $name üçün ilk init bloku, $name üçün ikinci init bloku, ikincil konstruktor, yaş 30
}
Əsas xüsusiyyətlər: birincil konstruktor üçün deklarativ sintaksis, init bloklarından istifadə, ikincil konstruktorlarda açıq delegasiya, obyektlərin yaradılmasında ardıcıllığı təmin edir.