Kotlin Nested dan Inner Class

Pada artikel ini, Anda akan belajar bekerja dengan kelas bersarang dan kelas dalam dengan bantuan contoh.

Kelas Bertingkat Kotlin

Mirip seperti Java, Kotlin memungkinkan Anda untuk mendefinisikan kelas dalam kelas lain yang disebut kelas bertingkat.

 kelas Luar (… kelas Bersarang (…))

Karena kelas bersarang adalah anggota dari kelas luar yang melingkupinya, Anda dapat menggunakan .notasi untuk mengakses Nestedkelas dan anggotanya.

Contoh: Kelas Bertingkat 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()) )

Saat Anda menjalankan program, hasilnya adalah:

Di dalam kelas Bersarang. Panggilan fungsi dari dalam kelas Bersarang.

Untuk Pengguna Java

Kelas bertingkat di Kotlin mirip dengan kelas bertingkat statis di Java.

Di Java, ketika Anda mendeklarasikan sebuah kelas di dalam kelas lain, itu menjadi kelas dalam secara default. Namun di Kotlin, Anda perlu menggunakan pengubah batin untuk membuat kelas dalam yang akan kita bahas selanjutnya.

Kelas Dalam Kotlin

Kelas bertingkat di Kotlin tidak memiliki akses ke instance 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()) )

Kode di atas tidak dapat dikompilasi karena kami mencoba mengakses properti foo kelas Luar dari dalam kelas Nested.

Untuk mengatasi masalah ini, Anda perlu menandai kelas bersarang dengan inner untuk membuat kelas dalam. Kelas dalam membawa referensi ke kelas luar, dan dapat mengakses anggota 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())") )

Saat Anda menjalankan program, hasilnya adalah:

Menggunakan objek luar: Di luar kelas Bersarang. Menggunakan objek dalam: Di luar kelas Bersarang.

Bacaan yang Direkomendasikan: Kelas Batin Anonim

Artikel yang menarik...