Zum Hauptinhalt springen

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 auch Cat das Animal Interface und definieren die makeSound 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;
}
}