method Default
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 23 dari 57.
Sebuah method antarmuka dapat memiliki isi. Implementasi default ini digunakan oleh setiap class yang tidak menimpanya:
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"
}Di dalam main:
println(Robot("R2").greet())
println(Pirate("Anne").greet())Output:
Hello, I am R2
Ahoy! Anne hereDefault method ditulis menggunakan anggota interface lainnya. Sebuah class menyediakan beberapa anggota yang berbeda dan menerima sisanya:
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
}Di dalam main:
val c = Coffee()
println(c.formatted())
println(c.isAffordable(400))Output:
$4.50
falseProperty dapat memiliki getter bawaan, tetapi interface tidak memiliki backing field, jadi tidak dapat menyimpan nilai. Property dengan initializer tidak dapat dikompilasi; getter yang menghitung nilai dapat digunakan:
interface Box {
val width: Int
val height: Int
val area: Int
get() = width * height
// val count = 0 // error: penginisialisasi property tidak diizinkan dalam interface
}
class Tile(override val width: Int, override val height: Int) : BoxDi dalam main:
println(Tile(3, 4).area)Output:
12Override tetap dapat menggunakan implementasi default. Di dalam class, super.method() memanggil versi interface:
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()
}Di dalam main:
println(Coffee().formatted())Output:
coffee $4.50Tantangan
MudahInterface Priced memiliki price (dalam sen). Berikan fungsi default formatted() yang mengembalikan $4.50 dan fungsi default isAffordable(budget) yang mengembalikan apakah harga tidak melebihi anggaran. Harga Coffee adalah 450 dan mengganti formatted() dengan coffee $4.50, dengan menggunakan kembali fungsi default melalui super. Sandwich(price) menggunakan kedua fungsi default.
Kode yang disediakan membaca anggaran dalam sen, lalu baris coffee atau sandwich,650. Kode mencetak formatted() dan yes atau no untuk setiap item.
Tulis kodemu di Priced.kt, Coffee.kt, dan Sandwich.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 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"}")
}
}
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