Arayüz Bildirimleri
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 22 / 57.
Bir arayüz, bir türün nasıl yapacağını söylemeden neler yapabileceğini listeler. Her uygulayan sınıfın sağlaması gereken metotları ve özellikleri bildirir. Bir sınıf, üst sınıfta olduğu gibi bir arayüzü iki nokta üst üste ile uygular; ancak arayüzün kurucusu olmadığı için parantez kullanılmaz:
interface Drawable {
fun draw(): String
}
class Circle(val radius: Int) : Drawable {
override fun draw() = "circle with radius $radius"
}
class Line(val length: Int) : Drawable {
override fun draw() = "-".repeat(length)
}main içinde:
println(Circle(3).draw())
println(Line(5).draw())Çıktı:
circle with radius 3
-----Bir arayüz özellikler de bildirebilir. Sınıf bunları kurucu özellikleri, depolanan özellikleri veya getter'lar olarak sağlar; arayüzün kendisi hiçbir şey depolamaz:
interface Vehicle {
val wheels: Int
val label: String
}
class Car(override val label: String) : Vehicle {
override val wheels = 4
}
class Bike : Vehicle {
override val wheels = 2
override val label: String
get() = "bike on $wheels wheels"
}main içinde:
println("${Car("taxi").label}: ${Car("taxi").wheels}")
println(Bike().label)Çıktı:
taxi: 4
bike on 2 wheelsArayüzün bildirdiği her üye, her biri override ile olmak üzere uygulanmalıdır; aksi takdirde sınıf derlenmez. Bir arayüz örneği oluşturulamaz:
interface Speaker {
fun speak(): String
val volume: Int
}
// class Mute : Speaker { override fun speak() = "" } // hata: volume uygulanmamış
// class Loud : Speaker() { ... } // hata: bir arayüzün yapıcısı yoktur
// val s = Speaker() // hata: bir arayüz oluşturulamazBir arayüz ve soyut bir sınıf, gövde olmadan üyeler bildirir. Bir arayüzün kurucusu ve saklanan durumu yoktur; bir sınıf birçok arayüzü uygulayabilir, ancak yalnızca bir sınıfı genişletebilir. Birbirinden bağımsız sınıfların paylaştığı bir yetenek için Drawable veya Comparable gibi bir arayüz; durum içeren ortak bir temel için ise soyut bir sınıf kullanın.
interface Drawable { fun draw(): String } // bir yetenek
abstract class Shape(val name: String) { abstract fun area(): Double } // durum içeren bir taban
class Square(val s: Double) : Shape("square"), Drawable { // bir sınıf, herhangi arayüzler
override fun area() = s * s
override fun draw() = "[]"
}Görev
KolayShape arayüzünün üyelerini bildirin: salt okunur bir name özelliği ve her ikisi de Double döndüren area() ve perimeter() metotları. Rectangle(width, height) (rectangle adlı) ve Circle(radius) (circle adlı, Math.PI kullanan) sınıflarının bunları uygulamasını sağlayın. Ardından yalnızca Shape üyelerini kullanarak, iki ondalık basamakla rectangle: area 12.00, perimeter 14.00 döndüren describe(shape) işlevini tamamlayın.
Sağlanan kod, r,3,4 veya c,2 satırlarını okur, eşleşen şekli oluşturur ve describe(shape) çıktısını yazdırır.
Kodunuz Shape.kt, Rectangle.kt, Circle.kt ve Functions.kt dosyalarına yazılmalıdır. Main.kt, sağlanan girdi/çıktı 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()
for (line in input) {
val p = line.split(",").map { it.trim() }
val shape: Shape = if (p[0] == "r") Rectangle(p[1].toDouble(), p[2].toDouble()) else Circle(p[1].toDouble())
println(describe(shape))
}
}
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