¿Cómo trabajar con clases anidadas en Kotlin?

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.

Trabajar con clases anidadas en Kotlin

Ahora veremos cómo trabajar con una clase anidada en los siguientes pasos: Probemos un ejemplo de una clase anidada en Kotlin:

Kotlin

fun main(args: Array<String>){
    var al = outCl()
    al.printAB()
    outCl.inCl().printB()
}
class outcl{
    var a = 6 
    fun printAB(){
        var b_ = incl().b
        printin("a = $a and b = $b_from inside outCl")
    }
    class incl{
        var b = "9" 
        fun printB(){
            printin("b = $b from inside incl")
        }
    }
}

Producción:

a = 6 and b = 9 from inside outCl
b = 9 from inside incl

Ahora, probemos un ejemplo de la clase interna. Para declarar una clase anidada como interna, usamos la palabra clave interna. Una clase interna puede acceder a miembros de la clase externa, ya que llevan una referencia a la clase externa:

Kotlin

fun main(args: Array<String>) {
  var a = outcl()
  a.printAB()
  a.incl().printAB()
}
class outcl {
  var a = 6
  fun printAB() {
    var b_ = incl().b
    println ("a = $a and b = $b_ from inside outCl")
  }
  inner class incl {
    var b = "9"
    fun printAB() {
      printin ("a = $a and b = $b from inside incl")
    }
  }
}

Producción:

a = 6 and b = 9 from inside outcl
b = 6 and b = 9 from inside incl

Se puede crear una clase anidada simplemente declarando la clase anidada dentro de otra clase. En este caso, para acceder a la clase anidada, haces una referencia estática que es como outsideClass.innerClass() , y también puedes hacer un objeto de clase interna usando esto. Una clase interna, por otro lado, se crea agregando la palabra clave interna a una clase anidada. En ese caso, accedemos a la clase interna como si fuera un miembro de la clase externa, es decir, usando un objeto de la clase externa como este:

var outerClassObject = outerClass ()
outerClassObject.innerClass ().memberVar

Una clase anidada no tiene acceso a los miembros de la clase externa, ya que no tiene ninguna referencia a un objeto de la clase externa. Por otro lado, la clase interna puede acceder a todos los miembros de la clase externa, ya que tiene una referencia a un objeto de la clase externa.

También podemos crear clases internas anónimas en Kotlin usando la palabra clave object , así:

Kotlin

val customText TemplateListener = object : ValueEventListener{
  override fun onCancelled (p0: DatabaseError?) {
  }
  override fun onDataChange (dataSnapshot: DataSnapshot?) {
  }
}

En la JVM, si el objeto es una instancia de una interfaz Java funcional (es decir, una interfaz Java con un solo método abstracto), puede crearlo utilizando una expresión lambda con el prefijo del tipo de interfaz:

val listener = ActionListener { println(“clic”) }

Publicación traducida automáticamente

Artículo escrito por eralokyadav2019 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *