Sobes.tech
Middle

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