Sobes.tech
Middle

Se pot crea moștenitori de la data class în Kotlin?

sobes.tech AI

Răspuns de la AI

Nu, nu este posibil direct. data class nu poate fi declarat ca open, ceea ce este o condiție necesară pentru moștenire în Kotlin. Acest lucru se datorează faptului că compilatorul generează metode speciale (equals(), hashCode(), toString(), copy()) pentru data class, iar moștenirea ar putea perturba funcționarea lor corectă.

Cu toate acestea, se pot folosi interfețe sau clase abstracte ca tipuri de bază, din care moștenesc atât clasele normale, cât și alte data class (dar nu direct de la alt data class).

// Exemplu de interfață
interface BaseInfo {
    val id: Int
    val name: String
}

// data class implementează interfața
data class User(
    override val id: Int,
    override val name: String,
    val age: Int
) : BaseInfo

// Alt data class implementează aceeași interfață
data class Product(
    override val id: Int,
    override val name: String,
    val price: Double
) : BaseInfo

// Exemplu de clasă abstractă
abstract class BaseEntity(open val id: Int, open val name: String)

// data class moștenește de la clasa abstractă
data class Order(
    override val id: Int,
    override val name: String, // Numele comenzii
    val totalAmount: Double
) : BaseEntity(id, name)

Astfel, deși moștenirea directă de la data class este interzisă, se poate obține o structură similară și reutilizarea logicii prin moștenirea de la interfețe sau clase abstracte.