Middle
Могу ли да креирам наследнике од data class у Kotlin-у?
sobes.tech АИ
Одговор од АИ
Не, то директно није могуће. data class не може бити проглашен као open, што је услов за наследство у Kotlin-у. То је због тога што компајлер генерише посебне методе (equals(), hashCode(), toString(), copy()) за data class, а наследство би могло нарушити њихову исправну функционалност.
Међутим, могу се користити интерфејси или апстрактне класе као основни тип, од којих наследе и обичне класе и друге data class (али не директно од другог data class).
// Пример интерфејса
interface BaseInfo {
val id: Int
val name: String
}
// data class имплементира интерфејс
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Други data class имплементира исти интерфејс
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Пример апстрактне класе
abstract class BaseEntity(open val id: Int, open val name: String)
// data class наследи од апстрактне класе
data class Order(
override val id: Int,
override val name: String, // Име наруџбине
val totalAmount: Double
) : BaseEntity(id, name)
На овај начин, иако је директно наслеђивање од data class забрањено, може се постићи слична структура и поновна употреба логике кроз наследство од интерфејса или апстрактних класа.