Abstrakte Klasse

Einführung

Eine abstrakte Klasse bezeichnet in der objektorientierten Programmierung eine spezielle Klasse, die mindestens eine, aber auch mehrere abstrakte Methoden enthalten (also Methoden ohne Körper (Implementierung) nur mit der Signatur). Per Definition können abstrakte Klassen nicht instanziiert, d.h. keine Objekte von ihnen erzeugt werden (Quelle: http://de.wikipedia.org/wiki/Abstrakte_Klasse).

Eine abstrakte Klasse ist in Java also eine Klasse, die niemals instanziiert wird. Ihr Zweck besteht darin die Superklasse verwandter Klassen zu sein.

Als Basisklassen in einer Klassenhierarchie können abstrakte Klassen grundlegendes Verhalten durch Methoden an ihrer Unterklassen vererben. Diese Methoden können wie bei der Vererbung implementiert werden. Die Funktionalität steht dann in der erbenden Klasse zur Verfügung. Alternativ kann eine Methode auch als abstrakt definiert werden. Dann müssen alle vererbten abstrakten Methoden überschrieben und implementiert werden.

Sobald eine Methode in einer Klasse als abstrakt deklariert wurde, ist die gesamte Klasse abstrakt!

Syntax

Wird der Kopf einer Klasse mit dem Schlüsselwort abstract versehen, so ist die Klasse abstrakt:

public abstract class User {....}

Wird die Signatur einer Methode mit dem Schlüsselwort abstract ergänzt, so sind die Methode und damit auch die Klasse abstrakt. Dann muss auch im Kopf der Klasse das Schlüsselwort abstract ergänzt werden:

public abstract class User {

public abstract setzePasswort(String passwort);

}

Abstrakte Methoden haben keine Körper, da sie erst in der erbenden Klasse implementiert werden (müssen!).

Beispiel

// Eine abstrakte Klasse. Sie kann keine Objekte erzeugen und dient der Vererbung.

public abstract class Anwender

{

private int nummer;

public int getNummer(){

return nummer;

}

public void setNummer(int nummer){

this.nummer = nummer;

}

// Eine Abstrakte Methode. Sie muss mit identischer Signatur in erbenden Klassen überschrieben werden!

public abstract String toString();

}

// Diese Klasse erbt von der abstrakten Klasse Anwender

public class Mitarbeiter extends Anwender

{

private String vorname;

private String nachname;

public Mitarbeiter(int mitarbeiterNummer, String vorname, String nachname){

this.vorname = vorname;

this.nachname = nachname;

this.setNummer(mitarbeiterNummer);// Die Methode setNummer wurde von der Klasse Anwender geerbt.

}

public String getNachname(){

return nachname;

}

public void setNachname(String nachname){

this.nachname = nachname;

}

public String getVorname(){

return vorname;

}

public void setVorname(String vorname){

this.vorname = vorname;

}

public String getVollstaendigenNamen(){

return getVorname() + " " + getNachname();

}

// Diese Methode muss implementiert werden, weil die Klasse Mitarbeiter von der abstrakten Klasse Anwender erbt

// und in dieser Klasse die Methode toString() als abstrakt deklariert wurde!

public String toString(){

return getNummer() + " " + getVollstaendigenNamen();

}

}