Sobes.tech
Junior

¿Cómo funcionan las palabras clave 'super' y 'this' en Kotlin?

sobes.tech AI

Respuesta de la IA

this hace referencia a la instancia actual de la clase o al destinatario de una expresión lambda. Se usa para indicar explícitamente un miembro de la clase o una referencia al objeto actual cuando hay ambigüedad (por ejemplo, cuando hay una variable local con el mismo nombre).

super se usa para llamar a métodos o acceder a propiedades de la clase padre. Se aplica cuando se necesita usar la implementación de la clase padre en lugar de la implementación sobrescrita en la clase actual.

Ejemplos:

class MyClass(val value: Int) {
    fun printValue() {
        println(this.value) // Uso explícito de this para acceder a la propiedad
    }
}

open class Parent {
    open fun greet() {
        println("Hola desde el padre")
    }
}

class Child : Parent() {
    override fun greet() {
        super.greet() // Llamada al método de la clase padre
        println("Hola desde el hijo")
    }
}

Al usar en funciones lambda, this puede referirse al receptor de la lambda:

fun String.addExclamation(): String {
    return this + "!" // this hace referencia a la cadena receptora
}

fun main() {
    val numbers = listOf(1, 2, 3)
    val sum = numbers.sum() // sum es una función de extensión, this dentro se refiere a la lista numbers
    println(sum)
}

Para resolver ambigüedades, cuando tienes clases anidadas o lambdas con receptores, puedes usar this@ClassName o this@label para calificar:

class A { // etiqueta implícita @A
    inner class B { // etiqueta implícita @B
        fun Int.foo() { // etiqueta implícita @foo
            val a = this@A // referencia a la instancia de A
            val b = this@B // referencia a la instancia de B
            val c = this // referencia a la instancia de Int, receptor de la función foo
            val c1 = this@foo // referencia a la instancia de Int, receptor de la función foo
        }
    }
}