override
- Kotlin kursu
- Orta seviye
- Ders 8/116
- 5 dk
override ile metot yeniden tanımlamayı öğrenirsin.
override
Üst sınıftaki open bir metodu alt sınıfta yeniden tanımlamak için override niteleyicisi kullanılır. Bu, alt sınıfa özgü davranış eklemenin standart yoludur.
Örnek: class Circle : Shape() { override fun area(): Double { return 3.14 * r * r } }. Burada area metodu Shape içinde open işaretliyse alt sınıfta override ile yeniden yazılır. override yazmazsan derleyici hata verir; çünkü Kotlin yanlışlıkla metot gizlemeyi önler. override edilen metotlar da varsayılan olarak açıktır.
open ve override bağı
Alt sınıfta bir metodu override ile yeniden tanımlayabilmek için üst sınıfta aynı metot open olmalıdır. open değilse override derlenmez.
Örnek: open class Shape { open fun area() = 0.0 }; alt sınıf override fun area() = ... yazabilir. Eğer Shape içinde area open değilse alt sınıfın override denemesi derleme hatası verir. final override yazarak alt sınıfın altında tekrar yeniden tanımlanmasını engelleyebilirsin.
Uygulama Shape üst sınıfı ve Circle alt sınıfı
Shape adında open bir sınıf tanımla; primary constructor val name: String alsın. İçinde open fun area(): Double = 0.0 metodu olsun. Circle adında bir alt sınıf tanımla; primary constructor name: String, val radius: Double alsın ve Shape(name) ile miras alsın. override fun area(): Double metodu 3.14 * radius * radius döndürsün. main içinde Circle("Daire", 2.0) örneği oluştur ve area()'yı yazdır.
Başlangıç kodu
// Shape üst sınıfı (open)
// alan metodu, varsayılan sıfır döner
// Circle alt sınıfı, name ve radius ile
// override ile alan hesapla
// main'de Circle örnekle, area yazdırÖrnek çözüm
open class Shape(val name: String) {
open fun area(): Double = 0.0
}
class Circle(name: String, val radius: Double) : Shape(name) {
override fun area(): Double {
return 3.14 * radius * radius
}
}
fun main() {
val c = Circle("Daire", 2.0)
println(c.area())
}Beklenen çıktı
12.56
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 override kalıbını eşle
| Kavram | Anlamı |
|---|---|
open fun area() |
Üst sınıfta açılan metot |
override fun area() |
Alt sınıfta yeniden tanım |
: Shape() |
Miras ve constructor |
return 3.14 * r * r |
Yeni gövde |
2 Bir alt sınıf <code>override fun area()</code> yazıyor ama üst sınıfta <code>area</code> <code>open</code> değil. Ne olur?
- Derleme hatası verilir Doğru cevap
- Kod normal derlenir
- Metot çalışma zamanında gizlenir
- Üst sınıfın gövdesi çalışır
Açıklama: open olmayan metot override edilemez; derleme hatası verilir.
3 Override metodunu tamamla
class Circle : Shape() {
____ fun area(): Double {
return 3.14 * r * r
}
}
class Circle : Shape() {
override fun area(): Double {
return 3.14 * r * r
}
}
Açıklama: override, üst sınıfın open metodunu yeniden tanımlar.