Kann man in Kotlin von data class erben?
sobes.tech KI
Antwort von AI
Nein, das ist nicht direkt möglich. data class kann nicht als open deklariert werden, was eine Voraussetzung für die Vererbung in Kotlin ist. Dies liegt daran, dass der Compiler spezielle Methoden (equals(), hashCode(), toString(), copy()) für data class generiert, und die Vererbung könnte deren korrekte Funktion beeinträchtigen.
Es ist jedoch möglich, Schnittstellen oder abstrakte Klassen als Basistypen zu verwenden, von denen sowohl normale Klassen als auch andere data class erben können (aber nicht direkt von einem anderen data class).
// Beispiel für eine Schnittstelle
interface BaseInfo {
val id: Int
val name: String
}
// data class implementiert die Schnittstelle
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Ein anderes data class implementiert die gleiche Schnittstelle
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Beispiel für eine abstrakte Klasse
abstract class BaseEntity(open val id: Int, open val name: String)
// data class erbt von der abstrakten Klasse
data class Order(
override val id: Int,
override val name: String, // Name der Bestellung
val totalAmount: Double
) : BaseEntity(id, name)
Auf diese Weise ist die direkte Vererbung von data class zwar verboten, aber man kann eine ähnliche Struktur und Logikwiederverwendung durch Vererbung von Schnittstellen oder abstrakten Klassen erreichen.