Sobes.tech
Middle

Is it possible to create subclasses from a data class in Kotlin?

sobes.tech AI

Answer from AI

No, it cannot be directly inherited. data class cannot be declared as open, which is a requirement for inheritance in Kotlin. This is because the compiler generates special methods (equals(), hashCode(), toString(), copy()) for data class, and inheritance could break their correct functioning.

However, you can use interfaces or abstract classes as a base type, from which both regular classes and other data classes can inherit (but not directly from another data class).

// Example interface
interface BaseInfo {
    val id: Int
    val name: String
}

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

// Another data class implementing same interface
data class Product(
    override val id: Int,
    override val name: String,
    val price: Double
) : BaseInfo

// Example abstract class
abstract class BaseEntity(open val id: Int, open val name: String)

// data class inheriting from abstract class
data class Order(
    override val id: Int,
    override val name: String, // Order name
    val totalAmount: Double
) : BaseEntity(id, name)

Thus, although direct inheritance from data class is prohibited, you can achieve similar structure and reuse logic via inheritance from interfaces or abstract classes.

Is it possible to create subclasses from a data class… - sobes.tech