CodeBlanks Logo Icon CodeBlanks

open

open ile miras alınabilir sınıf tanımlamayı öğrenirsin.

open: miras alınabilir sınıf

Kotlin'de sınıflar varsayılan olarak final'dir; yani miras alınamaz. Bir sınıfı miras alınabilir yapmak için open niteleyicisi eklenir.

Örnek: open class Animal(val name: String). Bu sınıf artık alt sınıflar tarafından miras alınabilir. open olmadan class Dog : Animal() yazarsan derleyici hata verir. Aynı durum metotlar için de geçerlidir; alt sınıfın yeniden tanımlayabileceği metotlar open ile işaretlenmelidir.

open metot

Bir metodu alt sınıfta yeniden tanımlanabilir yapmak için open niteleyicisi kullanılır. Varsayılan olarak sınıf metotları final'dir.

Örnek: open class Animal { open fun sound() { println("ses") } }. Burada hem sınıf hem metot open. Bu, alt sınıfın sound'u yeniden tanımlayabileceği anlamına gelir. Sınıf open olmadan metot open olamaz; önce sınıf acilmalıdır.

Uygulama Animal üst sınıfı ve Dog alt sınıfı

Animal adında open bir sınıf tanımla; primary constructor val name: String alsın. İçinde open fun sound() metodu olsun; gövdesi println("$name ses çıkarır") yazsın. Dog adında bir alt sınıf tanımla; Animal(name) ile miras alsın ve override fun sound() metodu println("$name havlar") yazsın. main içinde bir Dog örneği oluştur ve sound'u çağır.

Başlangıç kodu

Main.kt
// Animal üst sınıfı (open)
// open fun sound metodu ekle
// Dog alt sınıfı, Animal'a miras
// override fun sound ekle
// main'de Dog örnekle, sound çağır

Örnek çözüm

Main.kt
open class Animal(val name: String) {
    open fun sound() {
        println("$name ses çıkarır")
    }
}

class Dog(name: String) : Animal(name) {
    override fun sound() {
        println("$name havlar")
    }
}

fun main() {
    val d = Dog("Karabaş")
    d.sound()
}

Beklenen çıktı

Karabaş havlar

Soru ve cevaplar

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

1 Aşağıdaki tanımlardan hangisi miras alınabilir bir sınıf oluşturur?

  • class Animal(val name: String)
  • final class Animal(val name: String)
  • sealed class Animal(val name: String)
  • open class Animal(val name: String) Doğru cevap

Açıklama: open niteleyicisi miras alınabilirliği açar.

2 open sınıf tanımını tamamla

Soru
open ____ Animal(val name: String) {
    open fun sound() { println(name) }
}
Cevap
open class Animal(val name: String) {
    open fun sound() { println(name) }
}

Açıklama: open class ile miras alınabilir sınıf tanımlanır.

3 Miras kalıplarını eşle

Kavram Anlamı
open class Animal Miras alınabilir üst sınıf
class Dog : Animal() Alt sınıf bildirimi
open fun sound() Yeniden tanımlanabilir metot
Animal(name) Üst sınıf constructor çağrısı

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