Sobes.tech
Middle

¿Qué características de trabajo con herencia y delegación existen en Kotlin?

sobes.tech AI

Respuesta de la IA

En Kotlin, la herencia por defecto está cerrada (final), y las clases y métodos deben marcarse explícitamente como open para permitir la herencia y la sobrescritura. Solo se permite heredar de una clase, pero se pueden implementar múltiples interfaces.

Al heredar, el constructor de la clase base se llama después del constructor de la clase derivada:

open class Base(val name: String) {
    init { println("Inicializando Base") }
    open fun greeting() { println("Hola desde Base") }
}

class Derived(name: String, val age: Int) : Base(name) {
    init { println("Inicializando Derived") }
    override fun greeting() { println("Hola desde Derived") }
}

La delegación en Kotlin se implementa a nivel del lenguaje usando la palabra clave by. Permite transferir la implementación de una interfaz a otro objeto. Esto es una alternativa conveniente a la herencia de implementación (que no se soporta directamente).

interface Greeter {
    fun greet(name: String)
}

class GreeterImpl : Greeter {
    override fun greet(name: String) {
        println("Hola, $name!")
    }
}

class DelegateGreeter(greeter: Greeter) : Greeter by greeter

Aquí, DelegateGreeter delega la llamada al método greet al objeto greeter.

Comparación:

Característica Herencia Delegación (by)
Relación "es un" (Es) "tiene un" (Contiene)
Implementación Extensión directa de clase Transferencia de implementación a un objeto
Múltiples Una clase base Múltiples interfaces
Flexibilidad Menos flexible Más flexible, mediante composición
Visibilidad Hereda protected y pública Funciona a través de interfaces

La delegación suele ser preferible a la herencia para lograr flexibilidad y evitar problemas de "clase base frágil".