Birden Çok Arayüz
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 24 / 57.
Bir sınıf, virgüllerle ayrılmış birkaç arayüzü uygulayabilir. Hepsinin üyelerini uygulaması gerekir:
interface Switchable {
var isOn: Boolean
fun toggle() { isOn = !isOn }
}
interface Dimmable {
var level: Int
}
class Lamp : Switchable, Dimmable {
override var isOn = false
override var level = 100
}main içinde:
val lamp = Lamp()
lamp.toggle()
lamp.level = 40
println("${lamp.isOn} ${lamp.level}")Çıktı:
true 40Bir sınıf, aynı başlıkta bir sınıfı genişletebilir ve arayüzleri uygulayabilir. Yalnızca üst sınıfın kurucu çağrısı vardır:
open class Device(val name: String)
interface Rechargeable {
fun charge(): String
}
class Phone(name: String) : Device(name), Rechargeable {
override fun charge() = "$name is charging"
}main içinde:
println(Phone("Pixel").charge())Çıktı:
Pixel is chargingİki arayüz aynı yönteme varsayılan bir gövde sağladığında, sınıf bu yöntemi geçersiz kılmalı ve ne yapacağına karar vermelidir. super<Name>.method(), belirli bir arayüzün sürümünü çağırır:
interface Camera {
fun describe() = "takes photos"
}
interface Telephone {
fun describe() = "makes calls"
}
class SmartPhone : Camera, Telephone {
override fun describe() = super<Telephone>.describe() + " and " + super<Camera>.describe()
}main içinde:
println(SmartPhone().describe())Çıktı:
makes calls and takes photosBir arayüz diğer arayüzleri genişletebilir. Birleşik arayüzü uygulayan bir sınıf, bunların tüm üyelerini sağlamalıdır ve bunların her biri olarak kabul edilir:
interface Named {
val name: String
}
interface Contact : Named {
val email: String
fun card() = "$name <$email>"
}
class Person(override val name: String, override val email: String) : Contactmain içinde:
val ada = Person("Ada", "ada@example.com")
val named: Named = ada
println(ada.card())
println(named.name)Çıktı:
Ada <ada@example.com>
AdaGörev
Kolayİki arayüz akıllı bir cihazı tanımlar: Switchable, çağıranlar için salt okunur bir Boolean olan isOn değerini ve toggle() işlevini gerektirir; Dimmable ise yazılabilir bir brightness gerektirir. SmartLamp sınıfının her ikisini de uygulamasını sağlayın: başlangıçta parlaklığı 100 ve kapalı olsun, toggle() onu açıp kapatsın, 0 ile 100 dışındaki bir parlaklık setter tarafından bu aralığa sınırlandırılsın ve status() on 70% veya off döndürsün.
Sağlanan kod, toggle komutlarını veya bir parlaklık sayısını okur, bunları tek bir lambaya uygular ve her birinden sonra status() yazdırır; ardından lambanın Switchable ve Dimmable olduğunu kontrol eder.
Kodunuz Switchable.kt, Dimmable.kt ve SmartLamp.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()
val lamp = SmartLamp()
for (cmd in input) {
if (cmd == "toggle") lamp.toggle() else lamp.brightness = cmd.toInt()
println(lamp.status())
}
println("switchable: ${(lamp as Any) is Switchable}, dimmable: ${(lamp as Any) is Dimmable}")
}
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