Abstrakte Klassen: Unterschied zwischen den Versionen

Aus FI-Wiki
Zeile 25: Zeile 25:


'''Hinweis:'''   
'''Hinweis:'''   
Enthält eine Klasse '''mindestens''' eine abstrakte Methode, muss sie als '''abstract''' deklariert werden.   
Enthält eine Klasse '''mindestens''' eine abstrakte Methode, muss sie als '''abstract''' deklariert werden.  <br>
Eine Klasse kann auch ohne abstrakte Methoden als '''abstract''' definiert werden, um zu verhindern, dass Objekte direkt erzeugt werden.
Eine Klasse kann auch ohne abstrakte Methoden als '''abstract''' definiert werden, um zu verhindern, dass Objekte direkt erzeugt werden.



Version vom 7. April 2026, 14:51 Uhr

Abstrakte Klassen dienen als allgemeine Oberklassen und können nicht direkt instanziiert werden. Sie enthalten oft gemeinsame Implementierungen sowie abstrakte Methoden, die von Unterklassen konkret definiert werden müssen.

Zweck abstrakter Klassen

Abstrakte Klassen dienen dazu, gemeinsame Eigenschaften und Verhalten mehrerer Klassen zu bündeln und eine einheitliche Struktur vorzugeben.

Sie werden eingesetzt, wenn:

  • mehrere Klassen ähnliche Eigenschaften oder Methoden haben
  • aber nicht alle Methoden vollständig gleich implementiert werden können

Die abstrakte Klasse definiert dabei:

  • gemeinsame Attribute und Methoden (z. B. Farbe)
  • sowie Vorgaben für Unterklassen durch abstrakte Methoden

Unterklassen müssen diese Methoden konkret umsetzen und können zusätzlich eigenes Verhalten ergänzen.

Ziel: Code-Wiederverwendung, klare Struktur und bessere Wartbarkeit.

Eigenschaften

  • Mit dem Schlüsselwort abstract gekennzeichnet
  • Können konkrete (implementierte) und abstrakte (nicht implementierte) Methoden enthalten
  • Dürfen nicht instanziiert werden (kein new)

Hinweis: Enthält eine Klasse mindestens eine abstrakte Methode, muss sie als abstract deklariert werden.
Eine Klasse kann auch ohne abstrakte Methoden als abstract definiert werden, um zu verhindern, dass Objekte direkt erzeugt werden.

Beispiel

abstract class Figur {
    String farbe;

    public void setFarbe(String farbe) {
        this.farbe = farbe;
    }

    // abstrakte Methode ohne Implementierung
    abstract double berechneFlaeche();

}

Unterklassen müssen Methode implementieren

class Kreis extends Figur {
    double radius;

    @Override
    double berechneFlaeche() {
        return Math.PI * radius * radius;
    }

}

class Rechteck extends Figur {
    double breite;
    double hoehe;

    @Override
    double berechneFlaeche() {
        return breite * hoehe;
    }

}

Verwendung

Figur f = new Kreis();
f.setFarbe("rot");
System.out.println(f.berechneFlaeche());

Figur g = new Rechteck();
g.setFarbe("gelb");
System.out.println(g.berechneFlaeche());