5. Interfaces, Abstrakte Klassen und Vererbung
Konzepte und Zweck
Interfaces
- Ein Vertrag zwischen Klassen, der definiert, welche Methoden implementiert werden müssen
- Ermöglicht Mehrfachvererbung in Java
- Enthält nur abstrakte Methoden und Konstanten
- Fördert lose Kopplung zwischen Klassen
- Ideal für die Definition von Verhaltensstandards
Abstrakte Klassen
- Eine Basisklasse, die nicht instanziiert werden kann
- Kann sowohl abstrakte als auch konkrete Methoden enthalten
- Bietet gemeinsame Funktionalität für verwandte Klassen
- Ideal für Code-Wiederverwendung und partielle Implementierungen
- Kann Konstruktoren und Instanzvariablen haben
Vererbung
- Mechanismus zur Wiederverwendung und Erweiterung von Code
- Ermöglicht "is-a" Beziehungen zwischen Klassen
- Eine Klasse kann nur von einer Klasse erben (Single Inheritance)
super()
wird verwendet, um auf die Elternklasse zuzugreifen- Unterstützt Polymorphismus und Code-Organisation
Wann was verwenden?
- Interface: Wenn verschiedene Klassen ein gemeinsames Verhalten haben sollen
- Abstrakte Klasse: Wenn verwandte Klassen gemeinsame Implementierungen teilen
- Vererbung: Wenn eine spezialisierte Version einer existierenden Klasse benötigt wird
Interface Beispiel
public interface Animal {
void makeSound();
}
Abstrakte Klasse
public abstract class Bird {
public abstract void fly();
public void eat() {
System.out.println("Bird is eating");
}
}
Vererbung und super
public class Dog extends Animal {
public Dog() {
super(); // Ruft den Konstruktor der Elternklasse auf
}
@Override
public void makeSound() {
System.out.println("Woof");
}
}
Erklärung
super()
ruft den Konstruktor der Elternklasse auf.- Abstrakte Klassen können Methoden mit Logik haben; Interfaces nur Methodensignaturen.
Erweiterte Beispiele
Interface Beispiel mit Erklärung
public interface Animal {
void makeSound();
}
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof");
}
}
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow");
}
}
- In diesem Beispiel implementieren sowohl
Dog
als auchCat
dasAnimal
Interface und definieren diemakeSound
Methode. - Dies zeigt, wie Interfaces verwendet werden können, um ein gemeinsames Verhalten für verschiedene Klassen zu definieren.
Abstrakte Klasse und Vererbung Beispiel
public abstract class Shape {
protected String color;
public Shape(String color) {
this.color = color;
}
public abstract double calculateArea();
public String getColor() {
return color;
}
}
public class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
}