Menu
CoddyTech

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 40

Sebuah 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 charging

Ketika 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 photos

Sebuah 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) : Contact

Di dalam main:

val ada = Person("Ada", "ada@example.com")
val named: Named = ada
println(ada.card())
println(named.name)

Output:

Ada <ada@example.com>
Ada
challenge icon

Tantangan

Mudah

Dua 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}")
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Kotlin