Peut-on créer des héritiers de data class en Kotlin?
sobes.tech IA
Réponse de l'IA
Non, ce n’est pas possible directement. data class ne peut pas être déclaré comme open, ce qui est une condition nécessaire pour l’héritage en Kotlin. Cela est dû au fait que le compilateur génère des méthodes spéciales (equals(), hashCode(), toString(), copy()) pour data class, et l’héritage pourrait compromettre leur bon fonctionnement.
Cependant, il est possible d’utiliser des interfaces ou des classes abstraites comme types de base, dont héritent à la fois des classes normales et d’autres data class (mais pas directement d’un autre data class).
// Exemple d’interface
interface BaseInfo {
val id: Int
val name: String
}
// data class implémente l’interface
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Un autre data class implémente la même interface
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Exemple de classe abstraite
abstract class BaseEntity(open val id: Int, open val name: String)
// data class hérite de la classe abstraite
data class Order(
override val id: Int,
override val name: String, // Nom de la commande
val totalAmount: Double
) : BaseEntity(id, name)
Ainsi, bien que l’héritage direct de data class soit interdit, on peut atteindre une structure similaire et une réutilisation de la logique via l’héritage d’interfaces ou de classes abstraites.