Klassen und Objekte

Java-Klassengerüst

Klassen werden in Java mit dem Schlüsselwort class eingeleitet. Bei der Modellierung einer Klasse wird festgehalten, welche Attribute (Eigenschaften) und Methoden (Anfragen oder Aufträge) für die Klasse sinnvoll sind.

Im folgenden Beispiel wird für eine Klasse Schueler festgelegt, dass die Attribute Alter und Name verwendet werden. Beide bekommen durch den Konstruktor - eine besondere Methode mit dem gleichen Namen wie die Klasse - bei der Erzeugung eines Objekts der Klasse bereits saubere Anfangswerte. Zudem sind beide Attribute durch die beiden set-Methoden jederzeit veränderbar und die beiden get-Methoden jederzeit abfragbar.

public class Schueler {

    private String name;
    private int alter;

    public Schueler(String name, int alter) {
        this.name = name;
        this.alter = alter;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAlter(int alter) {
        this.alter = alter;
    }

    public int getAlter() {
        return alter;
    }

}

Erzeugen von Objekten

Die Syntax zum Erzeugen eines Objekts sieht die Verwendung des Schlüsselworts new vor. Greifen wir das obige Beispiel der Klasse Schueler wieder auf, so müssen bei der Erzeugung eines Objekts der Klasse Schueler bereits Werte für die beiden Attribute übergeben werden.

Schueler s = new Schueler("Otto", 15); // Objekt erzeugen

String z = s.getName(); // Namen abfragen 

int a = s.getAlter(); // Alter abfragen
s.setAlter(a+1); // und neu besetzen

Vererbung

Bei der Vererbung stehen der Unterklasse alle Methoden der Oberklasse zur Verfügung. Auch der geerbte Konstruktor kann dabei zur Verwendung kommen.

Im folgenden Beispiel wird einem Oberstufenschüler gegenüber einem Schüler zusätzlich das Attribut Tutor zugeordnet. Dieses Attribut kann hier zwar abgefragt, aber nach der Erzeugung nicht mehr verändert werden.

Zusätzlich demonstriert diese Klasse mit der Methode setName(), wie eine Methode überschrieben werden kann, ohne die bestehende vererbte Methoden komplett neu gestalten zu müssen. Auch die Methode erhoeheAlter() ist geschickt gelöst, da das Alter erhöht wird, ohne direkt auf das Attribut alter zugreifen zu müssen. (Bemerkung: Eine Unterklasse kann nur dann direkt auf ein Attribut einer Oberklasse zugreifen, wenn die Sichtbarkeit des Attributs statt private auf protected gesetzt ist.)

public class Oberstufenschueler extends Schueler {

    private String tutor;

    public Oberstufenschueler(String name, int alter, String tutor) {
        super(name, alter);
    }

    public String getTutor() {
        return tutor;
    }

    public void setName(String name) {
        if (name.length()==0) {
            super.setName("unbekannt");
        }
        else {
            super.setName(name);
        }
    }

    public void erhoeheAlter() {
        int alter = getAlter();
        alter++;
        setAlter(alter);
    }

}

results matching ""

    No results matching ""