¿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".