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