CodeBlanks Logo Icon CodeBlanks

companion object

companion object ile sınıf düzeyi üyeler öğrenirsin.

companion object

Bir companion object, sınıfın içine yerleştirilmiş tek bir nesnedir. Üyeleri sınıf adıyla çağrılır; sınıf örneği gerekmez. Bu, fabrika metotları ve sabitler için uygundur.

Örnek: class User(val name: String) { companion object { val default = "misafir" } }. Burada User.default doğrudan erişilir. companion object bir sınıfa bağlı singleton'dır; her sınıf için bir tane olur. Java'daki static üyelere benzer ama yine de gerçek bir nesnedir.

Fabrika metodu

Bir companion object'in en yaygın kullanımı fabrika metotlarıdır. Sınıfın nasıl örnekleneceğini gizler ve tek noktadan örnek oluşturur.

Örnek: class User(val name: String) { companion object { fun default() = User("misafir") } }. Bu yapı User.default() çağrısını sağlar; her zaman "misafir" adlı bir User döndürür. Sınıf dışından User("misafir") yazmak yerine fabrika metodu kullanılır. Bu, yapıcı mantığı tek bir yerde toplar.

Uygulama User fabrika metodunu tanımla

User(val name: String) adında bir sınıf tanımla. İçinde companion object bloğu olsun; fun default(): User metodu User("misafir") döndürsün. main içinde User.default().name değerini println ile yazdır.

Başlangıç kodu

Main.kt
// User sınıfı tanımı
// sınıf içi singleton bloğu ve default fabrika metodu
// main'de default çağır ve name'i yazdır

Örnek çözüm

Main.kt
class User(val name: String) {
    companion object {
        fun default(): User = User("misafir")
    }
}

fun main() {
    println(User.default().name)
}

Beklenen çıktı

misafir

Soru ve cevaplar

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

1 companion object parçalarını eşle

Kavram Anlamı
companion object Sınıf içi singleton
val default Sınıf düzeyi sabit
User.default Sınıf adıyla erişim
her sınıf için tek Örnek sayısı

2 Bir <strong>companion object</strong> içindeki üyeye nasıl erişilir?

  • Sınıf örneği üzerinden
  • new anahtar kelimesiyle
  • Yalnızca alt sınıftan
  • Sınıf adıyla doğrudan Doğru cevap

Açıklama: companion object üyeleri sınıf adıyla doğrudan çağrılır.

3 companion object tanımını tamamla

Soru
class User(val name: String) {
    ____ object {
        fun default() = User("misafir")
    }
}
Cevap
class User(val name: String) {
    companion object {
        fun default() = User("misafir")
    }
}

Açıklama: companion object sınıf içi singleton tanımlar.

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