Quais são as características do trabalho com herança e delegação em Kotlin?
sobes.tech IA
Resposta da IA
Em Kotlin, a herança por defeito está fechada (final), e as classes e métodos devem ser explicitamente marcados como open para permitir herança e sobrescrita. É suportada herança apenas de uma classe, mas podem implementar múltiplas interfaces.
Ao herdar, o construtor da classe base é chamado após o construtor da classe derivada:
open class Base(val name: String) {
init { println("Inicializando Base") }
open fun greeting() { println("Olá de Base") }
}
class Derived(name: String, val age: Int) : Base(name) {
init { println("Inicializando Derived") }
override fun greeting() { println("Olá de Derived") }
}
Delegação em Kotlin é implementada a nível da linguagem usando a palavra-chave by. Permite passar a implementação de uma interface para outro objeto. É uma alternativa conveniente à herança de implementação (que não é suportada diretamente).
interface Greeter {
fun greet(name: String)
}
class GreeterImpl : Greeter {
override fun greet(name: String) {
println("Olá, $name!")
}
}
class DelegateGreeter(greeter: Greeter) : Greeter by greeter
Aqui, DelegateGreeter delega a chamada do método greet ao objeto greeter.
Comparação:
| Característica | Herança | Delegação (by) |
|---|---|---|
| Relação | "é um" (É) | "tem uma" (Contém) |
| Implementação | Extensão direta de classe | Transferência de implementação a um objeto |
| Múltiplas | Uma classe base | Múltiplas interfaces |
| Flexibilidade | Menos flexível | Mais flexível, por composição |
| Visibilidade | Herda protected e public | Funciona através de interfaces |
Delegação é frequentemente preferida à herança para alcançar flexibilidade e evitar problemas de "classe base frágil".