Sobes.tech
Middle

É possível criar herdeiros de data class em Kotlin?

sobes.tech IA

Resposta da IA

Não, não é possível fazê-lo diretamente. data class não pode ser declarado como open, o que é uma condição necessária para herança em Kotlin. Isso ocorre porque o compilador gera métodos especiais (equals(), hashCode(), toString(), copy()) para data class, e a herança poderia comprometer seu funcionamento correto.

No entanto, é possível usar interfaces ou classes abstratas como tipos base, das quais herdam tanto classes normais quanto outros data class (mas não diretamente de outro data class).

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

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

// Outro data class implementa a mesma interface
data class Product(
    override val id: Int,
    override val name: String,
    val price: Double
) : BaseInfo

// Exemplo de classe abstrata
abstract class BaseEntity(open val id: Int, open val name: String)

// data class herda de classe abstrata
data class Order(
    override val id: Int,
    override val name: String, // Nome do pedido
    val totalAmount: Double
) : BaseEntity(id, name)

Assim, embora a herança direta de data class seja proibida, é possível alcançar uma estrutura semelhante e reutilizar lógica através da herança de interfaces ou classes abstratas.