CodeBlanks Logo Icon CodeBlanks

super

super ile üst sınıfın metotlarını çağırmayı öğrenirsin.

super

Alt sınıfta üst sınıfın bir metodunu çağırmak için super anahtar kelimesi kullanılır. Bu, genellikle override edilen metodun üst sınıf davranışını da çalıştırmak istediğinde kullanılır.

Örnek: override fun start() { super.start(); println("hazır") }. Burada super.start() üst sınıfın start'ını çağırır, sonra ek davranış çalışır. Bu kalıp, üst sınıfın işini koruyup üzerine bir şeyler eklemek için yaygındır. super olmadan doğrudan start() dersen sonsuz özyineleme oluşur.

super ve init

Alt sınıfın birincil yapıcısı, üst sınıfın yapıcısını : Base(...) şeklinde çağırır. Bu çağrı üst sınıfın init bloklarını da çalıştırır. super anahtar kelimesi ise metot gövdesi içinde üst sınıfın metotlarına erişir.

Örnek: class Car(brand: String) : Vehicle(brand) { override fun start() { super.start() } }. Burada Vehicle(brand) üst yapıcıyı çağırır ve Vehicle'ın init blokları çalışır. super.start() ise metot gövdesinde üst sınıfın start metodunu çağırır. İki kullanım birbirinden farklıdır.

Uygulama Vehicle üst sınıfı ve Car alt sınıfı

Vehicle adında open bir sınıf tanımla; primary constructor val brand: String alsın. İçinde open fun start() metodu olsun; gövdesi println("$brand çalıştı") yazsın. Car adında bir alt sınıf tanımla; primary constructor brand: String, val model: String alsın ve Vehicle(brand) ile miras alsın. override fun start() metodu önce super.start() çağrısı yapsın, sonra println("$model hazır") yazsın. main içinde Car("Toyota", "Corolla") örneği oluştur ve start'ı çağır.

Başlangıç kodu

Main.kt
// Vehicle üst sınıfı (open)
// open fun start: brand çalıştı yazsın
// Car alt sınıfı, brand ve model ile
// override fun start: önce super sonra model hazır
// main'de Car örnekle, start çağır

Örnek çözüm

Main.kt
open class Vehicle(val brand: String) {
    open fun start() {
        println("$brand çalıştı")
    }
}

class Car(brand: String, val model: String) : Vehicle(brand) {
    override fun start() {
        super.start()
        println("$model hazır")
    }
}

fun main() {
    val c = Car("Toyota", "Corolla")
    c.start()
}

Beklenen çıktı

Toyota çalıştı
Corolla hazır

Soru ve cevaplar

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

1 <code>override fun start() { super.start() }</code> kalıbı ne yapar?

  • Yalnızca alt sınıfın start'ını çalıştırır
  • Önce üst sınıfın start'ını çağırır, sonra alt sınıfın gövdesini çalıştırır Doğru cevap
  • Üst sınıfın start'ını gizler
  • Sonsuz özyineleme oluşturur

Açıklama: super.start() önce üst sınıfı çalıştırır; sonra alt sınıfın kalan gövdesi işler.

2 super çağrısını tamamla

Soru
override fun start() {
    ____.start()
    println("hazır")
}
Cevap
override fun start() {
    super.start()
    println("hazır")
}

Açıklama: super.start() üst sınıfın metodunu çağırır.

3 super kullanımlarını eşle

Kavram Anlamı
: Vehicle(brand) Üst yapıcı çağrısı
super.start() Üst metot çağrısı
override fun start() Yeniden tanım
init { ... } İlk değer bloğu

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