super
- Kotlin kursu
- Orta seviye
- Ders 9/116
- 5 dk
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
// 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
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
override fun start() {
____.start()
println("hazır")
}
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 |