Varsayılan Metotlar
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 23 / 57.
Bir arayüz metodunun gövdesi olabilir. Bu varsayılan uygulama, onu geçersiz kılmayan her sınıf tarafından kullanılır:
interface Greeter {
val name: String
fun greet() = "Hello, I am $name"
}
class Robot(override val name: String) : Greeter
class Pirate(override val name: String) : Greeter {
override fun greet() = "Ahoy! $name here"
}main içinde:
println(Robot("R2").greet())
println(Pirate("Anne").greet())Çıktı:
Hello, I am R2
Ahoy! Anne hereVarsayılan metotlar, arayüzün diğer üyeleri kullanılarak yazılır. Bir sınıf, farklı olan birkaç üyeyi sağlar ve geri kalanını alır:
interface Priced {
val cents: Int
fun formatted() = "$%d.%02d".format(cents / 100, cents % 100)
fun isAffordable(budget: Int) = cents <= budget
}
class Coffee : Priced {
override val cents = 450
}main içinde:
val c = Coffee()
println(c.formatted())
println(c.isAffordable(400))Çıktı:
$4.50
falseÖzelliklerin varsayılan bir alıcısı olabilir, ancak bir arayüzün destekleyen alanları yoktur; bu nedenle bir değeri depolayamaz. Başlatıcı içeren bir özellik derlenmez; değeri hesaplayan bir alıcı ise derlenir:
interface Box {
val width: Int
val height: Int
val area: Int
get() = width * height
// val count = 0 // hata: arayüzlerde özellik başlatıcılarına izin verilmez
}
class Tile(override val width: Int, override val height: Int) : Boxmain içinde:
println(Tile(3, 4).area)Çıktı:
12Bir geçersiz kılma, varsayılan uygulamayı yine de kullanabilir. Sınıfın içinde super.method(), arayüzün sürümünü çağırır:
interface Priced {
val cents: Int
fun formatted() = "$%d.%02d".format(cents / 100, cents % 100)
}
class Coffee : Priced {
override val cents = 450
override fun formatted() = "coffee " + super.formatted()
}main içinde:
println(Coffee().formatted())Çıktı:
coffee $4.50Görev
KolayPriced arayüzü, sent cinsinden price değerine sahiptir. $4.50 döndüren varsayılan bir formatted() ve fiyatın bütçeden büyük olmadığını döndüren varsayılan bir isAffordable(budget) sağlayın. Coffee 450 tutarındadır ve formatted() işlevini coffee $4.50 ile geçersiz kılar; varsayılanı super aracılığıyla yeniden kullanır. Sandwich(price) her iki varsayılanı da kullanır.
Sağlanan kod, sent cinsinden bir bütçe ve ardından coffee veya sandwich,650 satırlarını okur. Her öğe için formatted() ile birlikte yes veya no yazdırır.
Kodunuz Priced.kt, Coffee.kt ve Sandwich.kt dosyalarına gelmelidir. Main.kt, sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
val input = generateSequence(::readLine).toList()
val budget = input[0].toInt()
for (line in input.drop(1)) {
val p = line.split(",")
val item: Priced = if (p[0] == "coffee") Coffee() else Sandwich(p[1].toInt())
println("${item.formatted()} ${if (item.isAffordable(budget)) "yes" else "no"}")
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaBirincil Yapıcılarinit Blokları ve Doğrulamaİkincil YapıcılarTekrar - Kütüphane Kartı4Kalıtım
Açık Sınıflar ve Alt SınıflarÜyeleri Geçersiz Kılmasuper ve YapıcılarSoyut SınıflarTekrar - Personel Dizini2Özellikler ve Kapsülleme
Özel ErişimcilerGörünürlük DeğiştiricileriÖzel Setter'larlazy ve lateinitTekrar - Banka Hesabı5Arayüzler
Arayüz BildirimleriVarsayılan MetotlarBirden Çok ArayüzTür Olarak ArayüzlerÖzet - Ödeme Yöntemleri8Generic'ler
Generic FonksiyonlarGeneric SınıflarTür Kısıtlamalarıin ve out ile VaryansTekrar - Öncelik Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Kotlin playground