Middle
Kotlin'de data class'tan miras oluşturulabilir mi?
sobes.tech yapay zeka
AI'dan gelen yanıt
Hayır, doğrudan yapılamaz. data class open olarak ilan edilemez, bu da Kotlin'de kalıtım için gerekli bir koşuldur. Bu durum, derleyicinin equals(), hashCode(), toString(), copy() gibi özel metodlar üretmesiyle ilgilidir ve kalıtım bunların düzgün çalışmasını engelleyebilir.
Ancak, arayüzler veya soyut sınıflar temel türler olarak kullanılabilir ve hem normal sınıflar hem de diğer data class'lar (ancak doğrudan başka bir data class'tan değil) tarafından kalıtım alınabilir.
// Arayüz örneği
interface BaseInfo {
val id: Int
val name: String
}
// data class arayüzü uygular
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Aynı arayüzü uygulayan başka bir data class
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Soyut sınıf örneği
abstract class BaseEntity(open val id: Int, open val name: String)
// data class soyut sınıftan kalıtım alır
data class Order(
override val id: Int,
override val name: String, // Sipariş adı
val totalAmount: Double
) : BaseEntity(id, name)
Bu şekilde, doğrudan data class kalıtımı engellenmiş olsa da, arayüzler veya soyut sınıflar aracılığıyla benzer bir yapı ve mantık tekrar kullanılabilirliği sağlanabilir.