Clase anidada
Una clase se declara dentro de otra clase y luego se llama clase anidada . De forma predeterminada, la clase anidada es estática , por lo que podemos acceder a la propiedad de la clase anidada o a las variables mediante la notación de punto (.) sin crear un objeto de la clase.
Sintaxis de la declaración:
class outerClass { ............ // outer class properties or member function class nestedClass { .......... // inner class properties or member function } }
Nota: la clase anidada no puede acceder a los miembros de la clase externa, pero podemos acceder a la propiedad de la clase anidada desde la clase externa sin crear un objeto para la clase anidada.
Programa Kotlin para acceder a propiedades de clase anidadas:
Kotlin
// outer class declaration class outerClass { var str = "Outer class" // nested class declaration class nestedClass { val firstName = "Praveen" val lastName = "Ruhil" } } fun main(args: Array<String>) { // accessing member of Nested class print(outerClass.nestedClass().firstName) print(" ") println(outerClass.nestedClass().lastName) }
Producción:
Praveen Ruhil
En Kotlin, para acceder a la función miembro de la clase anidada, necesitamos crear el objeto para la clase anidada y llamar a la función miembro usándolo.
Programa Kotlin para acceder a la función de miembro de clase anidada:
Kotlin
// outer class declaration class outerClass { var str = "Outer class" // nested class declaration class nestedClass { var s1 = "Nested class" // nested class member function fun nestfunc(str2: String): String { var s2 = s1.plus(str2) return s2 } } } fun main(args: Array<String>) { // creating object of Nested class val nested = outerClass.nestedClass() // invoking the nested member function by passing string var result = nested.nestfunc(" member function call successful") println(result) }
Producción:
Nested class member function call successful
Comparación con Java
Las clases de Kotlin son muy similares a las clases de Java cuando pensamos en las capacidades y los casos de uso, pero no son idénticas. Anidado en Kotlin es similar a una clase anidada estática en Java y la clase interna es similar a una clase anidada no estática en Java.
Clase interna de Kotlin
Cuando podemos declarar una clase dentro de otra clase usando la palabra clave interior , entonces se llama clase interior. Con la ayuda de la clase interna, podemos acceder a la propiedad de la clase externa dentro de la clase interna.
class outerClass { ............ // outer class properties or member function inner class innerClass { .......... // inner class properties or member function } }
En el siguiente programa, estamos tratando de acceder a str desde la función miembro de la clase interna. Pero no funciona y da un error en tiempo de compilación.
Programa Kotlin de clase interna:
Kotlin
// outer class declaration class outerClass { var str = "Outer class" // innerClass declaration without using inner keyword class innerClass { var s1 = "Inner class" fun nestfunc(): String { // can not access the outer class property str var s2 = str return s2 } } } // main function fun main(args: Array<String>) { // creating object for inner class val inner= outerClass().innerClass() // inner function call using object println(inner.nestfunc()) }
Producción:
Error:(9, 22) Kotlin: Unresolved reference: str
Primero, use la palabra clave interna delante de la clase interna. Luego, cree una instancia de la clase externa, de lo contrario no podemos usar las clases internas.
Kotlin
// outer class declaration class outerClass { var str = "Outer class" // innerClass declaration with using inner keyword inner class innerClass { var s1 = "Inner class" fun nestfunc(): String { // can access the outer class property str var s2 = str return s2 } } } // main function fun main(args: Array<String>) { // creating object for inner class val inner= outerClass().innerClass() // inner function call using object println(inner.nestfunc()+" property accessed successfully from inner class ") }
Producción:
Outer class property accessed successfully from inner class
Publicación traducida automáticamente
Artículo escrito por Praveenruhil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA