0Pricing
Kotlin Academy · Lektion

sealed class vs. sealed interface: Wann welche Variante verwendet wird

Verstehen Sie den Unterschied zwischen Sealed Classes und Sealed Interfaces in Kotlin.

sealed class vs. sealed interface: Wann welche Variante verwendet wird ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Sealed-Typen in Kotlin

Sealed classes und Interfaces beschränken die Klassenhierarchie auf eine bekannte Menge von Subtypen und ermöglichen so vollständig abgedeckte when-Ausdrücke.

Grundlagen von sealed class

Eine sealed class beschränkt die Ableitung auf dasselbe Package (ab Kotlin 1.5) oder dieselbe Datei.
sealed class Shape
class Circle(val radius: Double) : Shape()
class Rectangle(val w: Double, val h: Double) : Shape()
object Unknown : Shape()

sealed interface: Mehr Flexibilität

Eine sealed interface ermöglicht es Subtypen, gleichzeitig andere Klassen zu erweitern UND andere Interfaces zu implementieren — das kann sealed class nicht.
sealed interface Result<out T>
data class Success<T>(val value: T) : Result<T>
data class Error(val ex: Exception) : Result<Nothing>

Wichtige Unterschiede

sealed class: Subklassen können Konstruktoren und Zustand besitzen. sealed interface: Subtypen können jede beliebige Klasse erweitern. Verwenden Sie sealed interface, wenn Sie mehr Flexibilität benötigen.
// sealed class subtype extends another class:
sealed interface Command
class MoveCommand(val dx: Int, val dy: Int) : Command, Serializable
class ResizeCommand(val scale: Double) : Command, Cloneable

Vollständiges when: Kein else erforderlich

Wenn alle sealed-Subtypen abgedeckt sind, ist der when-Ausdruck vollständig — ein else ist nicht erforderlich, und der Compiler erzwingt die Vollständigkeit.
fun area(shape: Shape): Double = when (shape) {
    is Circle -> Math.PI * shape.radius * shape.radius
    is Rectangle -> shape.w * shape.h
}  // no 'else' — compiler guarantees completeness

Das Hinzufügen eines Subtyps macht vorhandene when-Ausdrücke ungültig

Fügen Sie einen neuen sealed-Subtyp hinzu, schlagen vorhandene when-Ausdrücke bei der Kompilierung fehl, bis sie aktualisiert wurden. Das ist der wichtigste Vorteil.
// Add Triangle to Shape:
class Triangle(val base: Double, val height: Double) : Shape()
// Now the area() function above won't compile until
// a Triangle branch is added — safety net!

Sealed classes mit gemeinsamen Eigenschaften

Deklarieren Sie gemeinsame Eigenschaften in der sealed class.
sealed class NetworkResult {
    abstract val timestamp: Long
}
data class SuccessResult(val data: String, override val timestamp: Long) : NetworkResult()
data class FailureResult(val error: String, override val timestamp: Long) : NetworkResult()

Verschachtelte sealed-Typen

Sealed-Subtypen können selbst sealed sein und so mehrstufige Hierarchien bilden.
sealed interface UiState
object Loading : UiState
sealed interface Loaded : UiState
data class Content(val items: List<String>) : Loaded
data class Empty(val hint: String) : Loaded
data class Failure(val error: String) : UiState

object-Subtypen für Varianten ohne Zustand

Verwenden Sie object für sealed-Subtypen, die keinen Zustand enthalten.
sealed class Direction
object North : Direction()
object South : Direction()
object East : Direction()
object West : Direction()

fun move(d: Direction) = when (d) {
    North -> y++
    South -> y--
    East -> x++
    West -> x--
}

sealed + data class + object zusammen verwenden

Kombinieren Sie data class für zustandsbehaftete Subtypen und object für Singleton-Objekte unter einem sealed-Typ.
sealed class LoadState
object Idle : LoadState()
object Loading : LoadState()
data class Success(val count: Int) : LoadState()
data class Error(val msg: String) : LoadState()

Wann sealed class und wann interface?

Verwenden Sie sealed class, wenn alle Subtypen einen gemeinsamen Zustand besitzen. Verwenden Sie sealed interface, wenn Subtypen unterschiedliche Basisklassen erweitern oder andere Interfaces implementieren müssen.

Kurztest

Welchen Vorteil hat sealed interface gegenüber sealed class?

Zusammenfassung

sealed class/interface beschränkt die Hierarchie auf bekannte Typen. when über sealed ist vollständig — ein else ist nicht erforderlich. sealed interface ermöglicht es Subtypen, andere Klassen zu erweitern. Verwenden Sie data class für zustandsbehaftete und object für zustandslose Subtypen.

Häufig gestellte Fragen

Ist die Lektion „sealed class vs. sealed interface: Wann welche Variante verwendet wird“ kostenlos?

Ja — der vollständige Text von „sealed class vs. sealed interface: Wann welche Variante verwendet wird“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „sealed class vs. sealed interface: Wann welche Variante verwendet wird“?

Verstehen Sie den Unterschied zwischen Sealed Classes und Sealed Interfaces in Kotlin. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „sealed class vs. sealed interface: Wann welche Variante verwendet wird“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. sealed class vs. sealed interface: Wann welche Variante verwendet wird
  2. Vollständige when-Ausdrücke mit Sealed Hierarchies
  3. UI-Zustände mit Sealed Classes modellieren
  4. Sealed Hierarchies verschachteln und kombinieren
← Zurück zu Kotlin Academy