CodeBlanks Logo Icon CodeBlanks

Secondary constructor

Secondary constructor ile birden çok yapıcı öğrenirsin.

Secondary constructor

Bir sınıfta birden çok yapıcı istediğinde secondary constructor kullanırsın. constructor anahtar kelimesiyle başlar ve gövdesinde başka bir yapıcıya this(...) ile çağrı yapmalıdır.

Örnek: class Book(val title: String) { constructor(t: String, a: String) : this(t) { println(a) } }. Burada ikinci yapıcı önce this(t) ile primary constructor'ı çağırır, sonra kendi gövdesini çalıştırır. Her secondary constructor mutlaka bir this çağrısıyla başlamalıdır.

this(...) çağrısı

Bir secondary constructor, gövdesinde başka bir yapıcıya this(...) ile köprü kurar. Bu çağrı, yapıcı gövdesinin ilk satırı olur. Önce primary constructor ve init blokları çalışır, sonra secondary gövde çalışır.

Örnek: constructor(name: String, age: Int) : this(name) { println(age) }. Burada önce this(name) ile primary constructor, ardından secondary gövde çalışır. Bu sıra, özelliklerin her zaman başlatılmış olmasını garanti eder.

Uygulama Book sınıfına secondary constructor ekle

Book adında bir sınıf tanımla. Primary constructor val title: String parametresi alsın. Bir secondary constructor ekle: title ve author alsın, primary'ye this(title) ile köprü kursun ve gövdesinde println("Yazar: $author") yazsın. main içinde iki parametreli yapıcıyı çağır.

Başlangıç kodu

Main.kt
// Book sınıfı tanımı
// primary: val title: String
// secondary: title ve author, this(title) ile
// main içinde iki parametreli yapıcıyı çağır

Örnek çözüm

Main.kt
class Book(val title: String) {
    constructor(t: String, a: String) : this(t) {
        println("Yazar: $a")
    }
}

fun main() {
    val b = Book("Kotlin", "JetBrains")
}

Beklenen çıktı

Yazar: JetBrains

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Secondary constructor bölümlerini eşle

Kavram Anlamı
constructor(t, a) İkincil yapıcı imzası
: this(t) Primary çağrısı
{ println(a) } Ek gövde
class Book(val title) Primary constructor

2 Secondary constructor ne zaman kullanılır?

  • Sınıfın yalnızca tek bir parametresi varsa
  • Primary constructor kullanmak yasak olduğunda
  • Aynı sınıf için farklı parametre kombinasyonları gerektiğinde Doğru cevap
  • Sınıf kalıtım almayacaksa

Açıklama: Farklı parametre setleri gerektiğinde secondary constructor eklenir.

3 Secondary constructor gövdesini tamamla

Soru
class Book(val title: String) {
    constructor(t: String, a: String) ____ this(t) {
        println(a)
    }
}
Cevap
class Book(val title: String) {
    constructor(t: String, a: String) : this(t) {
        println(a)
    }
}

Açıklama: İki nokta, this çağrısını bağlar.

Orta seviye bölümündeki tüm dersler