Middle
Kotlin'da data class'dan vorislar yaratish mumkinmi?
sobes.tech AI
AIdan javob
Yo'q, to bevosita qilish mumkin emas. data class open sifatida e'lon qilinishi mumkin emas, bu Kotlin'da meros olish uchun zarur shartdir. Bu, kompilyator equals(), hashCode(), toString(), copy() kabi maxsus metodlarni yaratishi bilan bog'liq bo'lib, meros olish ularning to'g'ri ishlashiga xalaqit berishi mumkin.
Ammo, interfeyslar yoki abstrakt sinflardan foydalanish mumkin, ular asosiy tur sifatida ishlatiladi va ular orqali oddiy sinflar va boshqa data classlar (lekin to'g'ridan-to'g'ri boshqa data classdan emas) meros oladi.
// Interfeys misoli
interface BaseInfo {
val id: Int
val name: String
}
// data class interfeysni amalga oshiradi
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Boshqa data class ham shu interfeysni amalga oshiradi
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Abstrakt sinf misoli
abstract class BaseEntity(open val id: Int, open val name: String)
// data class abstrakt sinfdan meros oladi
data class Order(
override val id: Int,
override val name: String, // Buyurtma nomi
val totalAmount: Double
) : BaseEntity(id, name)
Shu tarzda, data classdan to'g'ridan-to'g'ri meros olish taqiqlangan bo'lsa-da, interfeyslar yoki abstrakt sinflar orqali shunga o'xshash tuzilma va mantiqni qayta ishlatish mumkin.