Sobes.tech
Junior

Was sind die Hauptunterschiede zwischen einer Klasse und einer Schnittstelle in Kotlin?

sobes.tech KI

Antwort von AI

  • Klasse: kann Eigenschaften (Zustände) und Funktionen (Verhalten) enthalten. Kann abstrakt, offen (für Vererbung) oder final sein. Konstruktoren legen fest, wie Objekte erstellt werden. Unterstützt Vererbung von einer Klasse und Mehrfachimplementierung von Schnittstellen.
  • Schnittstelle: definiert einen Verhaltensvertrag, den Klassen implementieren müssen. Kann abstrakte Deklarationen von Funktionen und Eigenschaften enthalten sowie Funktionen mit Implementierung (Java 8+). Kann keine Zustände (Eigenschaften mit Backing-Feldern) enthalten. Eine Klasse kann mehrere Schnittstellen implementieren. Hat keine Konstruktoren.

Vergleichstabelle:

Aspekt Klasse Schnittstelle
Zustand Kann Eigenschaften mit Wert haben. Kann keine Eigenschaften mit Wert haben (nur abstrakte).
Konstruktoren Können vorhanden sein. Haben keine.
Implementierung Kann vollständige Implementierung bereitstellen. Bietet teilweise oder vollständige Implementierung (mit Default-Methoden).
Vererbung Erbt von einer Klasse. Implementiert mehrere Schnittstellen.
Initialisierung Kann instanziiert werden. Kann nicht direkt instanziiert werden.
Typ Konkrete oder abstrakte Klasse. Nur Verhaltensvertrag.

Beispiel Klasse:

class Person(val name: String) { // Klasse mit Konstruktor und Eigenschaft
    fun greet() {
        println("Hello, my name is $name")
    }
}

Beispiel Schnittstelle:

interface Greeter { // Schnittstelle mit Methode
    fun greet()
}

class EnglishGreeter : Greeter { // Klasse, die die Schnittstelle implementiert
    override fun greet() {
        println("Hello!")
    }
}