Beberapa Interface
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 24 dari 57.
Sebuah class dapat mengimplementasikan beberapa interface yang dipisahkan dengan koma. Class tersebut harus mengimplementasikan anggota dari semuanya:
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
}Di dalam main:
val lamp = Lamp()
lamp.toggle()
lamp.level = 40
println("${lamp.isOn} ${lamp.level}")Output:
true 40Sebuah class dapat mewarisi satu class dan mengimplementasikan interface di header yang sama. Hanya superclass yang memiliki pemanggilan constructor:
open class Device(val name: String)
interface Rechargeable {
fun charge(): String
}
class Phone(name: String) : Device(name), Rechargeable {
override fun charge() = "$name is charging"
}Di dalam main:
println(Phone("Pixel").charge())Output:
Pixel is chargingKetika dua interface sama-sama memberikan body default untuk method yang sama, class harus meng-override-nya dan menentukan apa yang harus dilakukan. super<Name>.method() memanggil versi dari satu interface tertentu:
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()
}Di dalam main:
println(SmartPhone().describe())Output:
makes calls and takes photosSebuah interface dapat mewarisi interface lain. Class yang mengimplementasikan interface gabungan harus menyediakan anggota dari semua interface tersebut, dan class itu dianggap sebagai masing-masing interface tersebut:
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) : ContactDi dalam main:
val ada = Person("Ada", "ada@example.com")
val named: Named = ada
println(ada.card())
println(named.name)Output:
Ada <ada@example.com>
AdaTantangan
MudahDua antarmuka menjelaskan perangkat pintar: Switchable mewajibkan isOn (Boolean hanya-baca bagi pemanggil) dan toggle(), sedangkan Dimmable mewajibkan brightness yang dapat ditulis. Buat SmartLamp mengimplementasikan keduanya: lampu mulai dalam keadaan mati dengan kecerahan 100, toggle() mengubah keadaannya antara hidup dan mati, nilai kecerahan di luar rentang 0 hingga 100 dibatasi oleh setter, dan status() mengembalikan on 70% atau off.
Kode yang disediakan membaca perintah toggle atau angka kecerahan, menerapkannya pada satu lampu dan mencetak status() setelah setiap perintah, lalu memeriksa bahwa lampu tersebut adalah Switchable dan Dimmable.
Letakkan kodemu di Switchable.kt, Dimmable.kt, dan SmartLamp.kt. Main.kt berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
fun main() {
// Kode input/output yang disediakan: biarkan apa adanya
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}")
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classKonstruktor utamaBlok init dan validasiKonstruktor sekunderRingkasan: Kartu Perpustakaan2property dan Enkapsulasi
Accessor KustomModifier VisibilitasSetter Privatlazy dan lateinitRingkasan: Rekening Bank5Interface
Mendeklarasikan Interfacemethod DefaultBeberapa InterfaceInterface sebagai TipeUlasan: Metode Pembayaran11Proyek: Pengelolaan Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Kotlin