Özet - Kalıtım
- Kotlin kursu
- Orta seviye
- Ders 12/116
- 5 dk
open, override ve abstract'ı birleştirerek bir şekil hiyerarşisi yazarsın.
Özet - Kalıtım
Bu grupta open ile miras alınabilir sınıfları, override ile metot yeniden tanımlamayı, super ile üst sınıf davranışını, abstract ile sözleşmeyi ve interface ile arayüz uygulama kavramlarını öğrendin.
Şimdi bunları birleştireceksin: abstract bir üst sınıf, onu miras alan somut alt sınıflar ve uygulanan bir arayüz ile bir şekil hiyerarşisi kuracaksın. Bu yapı, Kotlin nesne yönelimli programlamanın omurgasıdır. İleride sealed sınıflar ve jenerikler bu temelin üzerine eklenecek.
Uygulama Shape hiyerarşisini birleştir
Shape adında abstract bir sınıf tanımla; primary constructor val name: String alsın. İçinde abstract fun area(): Double metodu olsun. Square adında bir alt sınıf tanımla; primary constructor name: String, val side: Double alsın ve Shape(name) ile miras alsın; override fun area(): Double metodu side * side döndürsün. Triangle adında başka bir alt sınıf tanımla; primary constructor name: String, val base: Double, val height: Double alsın ve Shape(name) ile miras alsın; override fun area(): Double metodu 0.5 * base * height döndürsün. main içinde her iki alt sınıftan birer örnek oluştur ve isim ile alanı yazdır.
Başlangıç kodu
// Shape abstract sınıfı
// soyut alan metodu imzası
// Square alt sınıfı, name ve side ile
// Triangle alt sınıfı, name, base, height ile
// main'de iki örnek oluştur, isim ve alan yazdırÖrnek çözüm
abstract class Shape(val name: String) {
abstract fun area(): Double
}
class Square(name: String, val side: Double) : Shape(name) {
override fun area(): Double = side * side
}
class Triangle(name: String, val base: Double, val height: Double) : Shape(name) {
override fun area(): Double = 0.5 * base * height
}
fun main() {
val s = Square("Kare", 4.0)
val t = Triangle("Üçgen", 6.0, 3.0)
println("${s.name}: ${s.area()}")
println("${t.name}: ${t.area()}")
}Beklenen çıktı
Kare: 16.0 Üçgen: 9.0
Sırada ne var?
Miras ve arayüzleri öğrendin. Sonraki gruplarda data class ile veri sınıflarını, copy ile kopyalamayı ve sealed class ile kapalı hiyerarşileri keşfedeceksin.
Bu grup; open, override, super, abstract ve interface kavramlarını birleştirdi. Bunlar Kotlin kalıtımının temelidir. Bir sonraki adımda veri sınıflarının otomatik ürettiği equals, hashCode ve toString gibi metotları göreceksin.
Uygulama Paid arayüzü ve Contractor sınıfı
Paid adında bir arayüz tanımla; içinde fun pay(): Double metodu olsun. Employee adında open bir sınıf tanımla; primary constructor val name: String, val hourlyRate: Double alsın ve open fun hours() = 40 metodu olsun. Contractor adında bir alt sınıf tanımla; Employee(name, hourlyRate) ile miras alsın, Paid arayüzünü uygulasın, override fun hours() = 30 ve override fun pay(): Double metodu hourlyRate * hours() döndürsün. main içinde bir Contractor örneği oluştur ve isim ile ödeme tutarını yazdır.
Başlangıç kodu
// Paid arayüzü
// fun pay(): Double imzası
// Employee open sınıfı, name ve hourlyRate
// Contractor alt sınıfı, Employee ve Paid uygular
// override hours ve pay; main'de örnekle ve yazdırÖrnek çözüm
interface Paid {
fun pay(): Double
}
open class Employee(val name: String, val hourlyRate: Double) {
open fun hours() = 40
}
class Contractor(name: String, hourlyRate: Double) : Employee(name, hourlyRate), Paid {
override fun hours() = 30
override fun pay(): Double {
return hourlyRate * hours()
}
}
fun main() {
val c = Contractor("Ayşe", 50.0)
println("${c.name} maaş: ${c.pay()}")
}Beklenen çıktı
Ayşe maaş: 1500.0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir alt sınıf, üst sınıfın open metodunu yeniden tanımlamak için hangi niteleyiciyi kullanır?
- override Doğru cevap
- open
- abstract
- final
Açıklama: override niteleyicisi yeniden tanımı belirtir.
2 Arayüz uygulamasını tamamla
class Triangle : ____ {
override fun area() = 0.5 * base * height
}
class Triangle : Shape {
override fun area() = 0.5 * base * height
}
Açıklama: abstract sınıf : ile miras alınır.