Dalam artikel ini, anda akan belajar bekerja dengan kelas bersarang dan dalaman dengan bantuan contoh.
Kelas Bersarang Kotlin
Sama seperti Java, Kotlin membolehkan anda menentukan kelas dalam kelas lain yang dikenali sebagai kelas bersarang.
kelas Luar (… kelas Bersarang (…))
Oleh kerana kelas Nested adalah anggota kelas terlampirnya Luar, anda boleh menggunakan .
notasi untuk mengakses Nested
kelas dan ahlinya.
Contoh: Kelas Bersarang Kotlin
class Outer ( val a = "Outside Nested class." class Nested ( val b = "Inside Nested class." fun callMe() = "Function call from inside Nested class." ) ) fun main(args: Array) ( // accessing member of Nested class println(Outer.Nested().b) // creating object of Nested class val nested = Outer.Nested() println(nested.callMe()) )
Semasa anda menjalankan program, outputnya adalah:
Di dalam kelas Bersarang. Panggilan fungsi dari dalam kelas Bersarang.
Untuk Pengguna Java
Kelas bersarang di Kotlin mirip dengan kelas bersarang statik di Jawa.
Di Java, apabila anda menyatakan kelas di dalam kelas lain, ia menjadi kelas dalaman secara lalai. Walau bagaimanapun di Kotlin, anda perlu menggunakan pengubah dalaman untuk membuat kelas dalaman yang akan kita bincangkan seterusnya.
Kelas Dalam Kotlin
Kelas bersarang di Kotlin tidak mempunyai akses ke contoh kelas luar. Sebagai contoh,
class Outer ( val foo = "Outside Nested class." class Nested ( // Error! cannot access member of outer class. fun callMe() = foo ) ) fun main(args: Array) ( val outer = Outer() println(outer.Nested().callMe()) )
Kod di atas tidak akan disusun kerana kami cuba mengakses harta benda kelas Luar dari dalam kelas Bersarang.
Untuk menyelesaikan masalah ini, anda perlu menandakan kelas bersarang dengan dalaman untuk membuat kelas dalaman. Kelas dalaman membawa rujukan ke kelas luar, dan dapat mengakses ahli kelas luar.
Contoh: Kelas Dalam Kotlin
class Outer ( val a = "Outside Nested class." inner class Inner ( fun callMe() = a ) ) fun main(args: Array) ( val outer = Outer() println("Using outer object: $(outer.Inner().callMe())") val inner = Outer().Inner() println("Using inner object: $(inner.callMe())") )
Semasa anda menjalankan program, outputnya adalah:
Menggunakan objek luar: Kelas Luar Bersarang. Menggunakan objek dalaman: Kelas luar Bersarang.
Bacaan yang Disyorkan: Kelas Dalaman Tanpa Nama