CodeBlanks Logo Icon CodeBlanks

companion ve interface

companion object ile interface uygulama öğrenirsin.

companion object ve interface

Bir companion object bir arabirimi uygulayabilir. Bu, sınıfın kendisi için bir fabrika olarak davranmasını sağlar; arabirim referansı üzerinden çağrılabilir.

Örnek: interface Factory<T> { fun create(): T }; class User(val name: String) { companion object : Factory<User> { override fun create() = User("misafir") } }. Burada User.create() bir User döndürür. Ayrıca val f: Factory<User> = User yazılabilir; companion object kendisi bir nesnedir. Bu, bağımlılık enjeksiyonu ve test edilebilirlik için yararlıdır.

Factory<T> arabirimi

Bir Factory<T> arabirimi, bir tür üreten metodu tanımlar. Sınıfın companion object'i bu arabirimi uygulayarak fabrika rolü üstlenir.

Örnek: interface Factory<T> { fun create(): T }. User sınıfı companion object : Factory<User> { override fun create() = User("misafir") } ile uygular. User.create().name çağrısı misafir döndürür. Generic fabrika arabirimi, farklı sınıfların ortak bir sözleşmeyle örnek üretmesini sağlar. Testlerde sahte fabrika geçmek kolaylaşır.

Uygulama Factory<T> uygulayan companion object

Factory<T> adında generic bir arabirim tanımla; fun create(): T metodu olsun. User(val name: String) sınıfı tanımla; companion object : Factory<User> ile uygulayıp override fun create() = User("misafir") yaz. main içinde User.create().name değerini println ile yazdır.

Başlangıç kodu

Main.kt
// Factory<T> generic arabirimi tanımı
// User sınıfı ve sınıf içi blok ile uygula
// main'de create çağır ve name'i yazdır

Örnek çözüm

Main.kt
interface Factory<T> {
    fun create(): T
}

class User(val name: String) {
    companion object : Factory<User> {
        override fun create() = User("misafir")
    }
}

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

Beklenen çıktı

misafir

Soru ve cevaplar

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

1 Bir companion object'in arabirim uygulaması ne sağlar?

  • Sınıfın birden çok örnek oluşturması
  • Sınıf adının arabirim referansına atanması Doğru cevap
  • Kalıtım zinciri kısaltması
  • Soyut metotların silinmesi

Açıklama: companion object bir arabirim uygulayınca sınıf adı arabirim referansına atanabilir.

2 companion + interface parçalarını eşle

Kavram Anlamı
interface Factory<T> Arabirim tanımı
companion object : Factory<User> Uygulama
override fun create Metot uygulama
User.create() Fabrika çağrısı

3 companion + interface tanımını tamamla

Soru
class User(val name: String) {
    companion object : ____<User> {
        override fun create() = User("misafir")
    }
}
Cevap
class User(val name: String) {
    companion object : Factory<User> {
        override fun create() = User("misafir")
    }
}

Açıklama: companion object : Factory<User> ile arabirim uygulanır.

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