Abstrakte Klassen: Unterschied zwischen den Versionen
| (14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
== | 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 | * Mit dem Schlüsselwort '''abstract''' gekennzeichnet | ||
| Zeile 9: | Zeile 24: | ||
* Dürfen nicht instanziiert werden (kein '''new''') | * Dürfen nicht instanziiert werden (kein '''new''') | ||
'''Hinweis:''' | |||
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. | |||
== Beispiel == | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
abstract class Figur { | abstract class Figur { | ||
String farbe; | private String farbe; | ||
public String getFarbe() { | |||
return farbe; | |||
} | |||
public void setFarbe(String farbe) { | public void setFarbe(String farbe) { | ||
| Zeile 25: | Zeile 47: | ||
} </syntaxhighlight> | } </syntaxhighlight> | ||
== | == Unterklassen müssen Methode implementieren == | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
class Kreis extends Figur { | class Kreis extends Figur { | ||
double radius; | private double radius; | ||
public double getRadius() { | |||
return radius; | |||
} | |||
public void setRadius(double radius) { | |||
this.radius= radius; | |||
} | |||
@Override | @Override | ||
double berechneFlaeche() { | double berechneFlaeche() { | ||
return Math.PI * radius * radius; | return Math.PI * radius * radius; | ||
} | |||
} | |||
class Rechteck extends Figur { | |||
private double breite; | |||
private double hoehe; | |||
public double getBreite() { | |||
return breite; | |||
} | |||
public void setBreite(double breite) { | |||
this.breite = breite; | |||
} | |||
public double getHoehe() { | |||
return hoehe; | |||
} | |||
public void setHoehe(double hoehe) { | |||
this.hoehe = hoehe; | |||
} | |||
@Override | |||
double berechneFlaeche() { | |||
return breite * hoehe; | |||
} | } | ||
} </syntaxhighlight> | } </syntaxhighlight> | ||
== Verwendung == | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
Kreis k = new Kreis(); | |||
k.setFarbe("rot"); | |||
System.out.println( | k.setRadius(5); | ||
System.out.println(k.berechneFlaeche()); | |||
Rechteck r = new Rechteck(); | |||
r.setFarbe("gelb"); | |||
r.setBreite(5); | |||
r.setHoehe(9); | |||
System.out.println(r.berechneFlaeche()); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Kategorie:Programmieren]] | [[Kategorie:Programmieren]] | ||
[[Kategorie:Semester2]] | [[Kategorie:Semester2]] | ||
Aktuelle Version vom 8. April 2026, 08:43 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 {
private String farbe;
public String getFarbe() {
return 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 {
private double radius;
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius= radius;
}
@Override
double berechneFlaeche() {
return Math.PI * radius * radius;
}
}
class Rechteck extends Figur {
private double breite;
private double hoehe;
public double getBreite() {
return breite;
}
public void setBreite(double breite) {
this.breite = breite;
}
public double getHoehe() {
return hoehe;
}
public void setHoehe(double hoehe) {
this.hoehe = hoehe;
}
@Override
double berechneFlaeche() {
return breite * hoehe;
}
}
Verwendung
Kreis k = new Kreis();
k.setFarbe("rot");
k.setRadius(5);
System.out.println(k.berechneFlaeche());
Rechteck r = new Rechteck();
r.setFarbe("gelb");
r.setBreite(5);
r.setHoehe(9);
System.out.println(r.berechneFlaeche());
