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 |