Sobes.tech
Middle

Wann sollte man eine Schnittstelle und wann eine abstrakte Klasse verwenden?

sobes.tech KI

Antwort von AI

Wir verwenden eine abstrakte Klasse, um grundlegende Funktionalitäten und einen allgemeinen Zustand zu erstellen, den Unterklassen erben können. Sie eignet sich, wenn es gemeinsame Methoden mit Implementierung und Methoden gibt, die überschrieben werden müssen. Die abstrakte Klasse kann Felder und Konstruktoren haben.

// Abstrakte Klasse
abstract class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }

    abstract void makeSound(); // Abstrakte Methode

    void eat() { // Methode mit Implementierung
        System.out.println(name + " isst.");
    }
}

Wir verwenden eine Schnittstelle, um einen Vertrag zu definieren, der eine Reihe von Methoden beschreibt, die von Klassen implementiert werden müssen. Sie eignet sich, um Mehrfachverhalten (Mehrfachvererbung von Funktionalität) zu erreichen. Die Schnittstelle kann keinen Zustand (Instanzfelder, außer Konstanten) und keine Konstruktoren haben (vor Java 8).

// Schnittstelle
interface Flyable {
    void fly(); // Abstrakte Methode
}

Vergleichstabelle der Unterschiede:

Merkmal Abstrakte Klasse Schnittstelle
Art der Mitglieder Felder, abstrakte und konkrete Methoden, Konstruktoren Konstanten, abstrakte Methoden (standardmäßig), statische und default-Methoden (ab Java 8)
Methodenimplementierung Kann Methoden mit Implementierung haben Nur abstrakte Methoden bis Java 8, ab Java 8 - static und default
Zustand Kann Zustand (Felder) haben Kann keinen Zustand haben (Instanzfelder)
Vererbung Einfache Vererbung Mehrfache Implementierung
Verwendung "ist ein" (is-a) - Basistyp "hat" (has-a) - Verhaltensvertrag