Sobes.tech
Middle

Quelles sont les caractéristiques du travail avec l'héritage et la délégation en Kotlin?

sobes.tech IA

Réponse de l'IA

En Kotlin, l'héritage par défaut est fermé (final), et les classes et méthodes doivent être explicitement marquées comme open pour permettre l'héritage et la surcharge. L'héritage est limité à une seule classe, mais plusieurs interfaces peuvent être implémentées.

Lors de l'héritage, le constructeur de la classe de base est appelé après celui de la classe dérivée :

open class Base(val name: String) {
    init { println("Initialisation de Base") }
    open fun greeting() { println("Bonjour de Base") }
}

class Derived(name: String, val age: Int) : Base(name) {
    init { println("Initialisation de Derived") }
    override fun greeting() { println("Bonjour de Derived") }
}

La délégation en Kotlin est implémentée au niveau du langage avec le mot-clé by. Elle permet de transférer l'implémentation d'une interface à un autre objet. C'est une alternative pratique à l'héritage d'implémentation (qui n'est pas supporté directement).

interface Greeter {
    fun greet(name: String)
}

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

class DelegateGreeter(greeter: Greeter) : Greeter by greeter

Ici, DelegateGreeter délègue l'appel de la méthode greet à l'objet greeter.

Comparaison :

Fonctionnalité Héritage Délégation (by)
Relation "est un" (est) "a un" (contient)
Implémentation Extension directe de classe Transfert d'implémentation à un objet
Multiplicité Une classe de base Plusieurs interfaces
Flexibilité Moins flexible Plus flexible, via composition
Visibilité Hérite de protected et public Fonctionne via des interfaces

La délégation est souvent préférée à l'héritage pour atteindre la flexibilité et éviter les problèmes de "classe de base fragile".