Sobes.tech
Middle

¿Se pueden crear herederos de data class en Kotlin?

sobes.tech AI

Respuesta de la IA

No, no se puede hacer directamente. data class no puede ser declarado como open, lo cual es un requisito para la herencia en Kotlin. Esto se debe a que el compilador genera métodos especiales (equals(), hashCode(), toString(), copy()) para data class, y la herencia podría interferir con su correcto funcionamiento.

Sin embargo, se pueden usar interfaces o clases abstractas como tipos base, de los cuales heredan tanto clases normales como otros data class (pero no directamente de otro data class).

// Ejemplo de interfaz
interface BaseInfo {
    val id: Int
    val name: String
}

// data class implementa la interfaz
data class User(
    override val id: Int,
    override val name: String,
    val age: Int
) : BaseInfo

// Otro data class implementa la misma interfaz
data class Product(
    override val id: Int,
    override val name: String,
    val price: Double
) : BaseInfo

// Ejemplo de clase abstracta
abstract class BaseEntity(open val id: Int, open val name: String)

// data class hereda de la clase abstracta
data class Order(
    override val id: Int,
    override val name: String, // Nombre del pedido
    val totalAmount: Double
) : BaseEntity(id, name)

De esta forma, aunque la herencia directa de data class está prohibida, se puede lograr una estructura similar y reutilización de lógica mediante la herencia de interfaces o clases abstractas.