Middle
Létrehozhatók-e örökösök a data class-ból Kotlinben?
sobes.tech MI
Válasz az MI-től
Nem, ez közvetlenül nem lehetséges. A data class nem deklarálható open-ként, ami szükséges a Kotlinban az örökléshez. Ez azért van, mert a fordító speciális módszereket (equals(), hashCode(), toString(), copy()) generál a data class-hoz, és az öröklés megzavarhatja azok helyes működését.
Azonban interfészek vagy absztrakt osztályok használhatók alap típusként, melyekből mind normál osztályok, mind más data class-ok (de nem közvetlenül egy másik data class-ból) örökölhetnek.
// Interfész példa
interface BaseInfo {
val id: Int
val name: String
}
// data class implementálja az interfészt
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Egy másik data class implementálja ugyanazt az interfészt
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Absztrakt osztály példa
abstract class BaseEntity(open val id: Int, open val name: String)
// data class örököl az absztrakt osztálytól
data class Order(
override val id: Int,
override val name: String, // Rendelés neve
val totalAmount: Double
) : BaseEntity(id, name)
Így, bár a közvetlen öröklés a data class-ból tiltott, hasonló szerkezet és logika újrahasznosítás érhető el interfészek vagy absztrakt osztályok öröklésével.