Public und private

Aus Wiki Herr Kimmig
Version vom 7. Dezember 2015, 15:03 Uhr von Akimmig (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Category:Informatik Category:J1 == Einführung == Oft soll bei einer Änderung eines Attributes zuerst überprüft werden, ob diese Änderung überha…“)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche


Einführung

Oft soll bei einer Änderung eines Attributes zuerst überprüft werden, ob diese Änderung überhaupt zulässig ist. Beispielsweise soll bei einem Bankkonto das Abheben von Geld nur funktionieren, wenn das Guthaben dafür ausreicht. Es wäre deshalb nicht sinnvoll, das Attribut guthaben direkt zu ändern.

Beispiel

Eine bessere Möglichkeit hierfür ist, eine Methode abheben zu programmieren, welche den Kontostand überprüft und nur bei ausreichendem Guthaben das Geld ausbezahlt.

Es muss dann allerdings noch sichergestellt werden, dass das Attribut guthaben nur durch diese Methode und nicht direkt im Programmablauf (d.h. in der main-Methode) verändert werden darf, folgendes darf natürlich nicht möglich sein:

public class Bankkonto {
    public double guthaben;
}

public class Test {
    public static void main(String[] args) {
        Bankkonto k = new Bankkonto(); // neues Bankkonto anlegen

        k.guthaben = k.guthaben - 10000; // Guthaben des Bankkontos ändern
    }
}

Hierzu gibt es das Schlüsselwort private. Attribute und Methoden, bei welchen statt dem Schlüsselwort public das Schlüsselwort private steht, können nur durch die Klasse selbst benutzt werden! Folgender Code würde dann nicht mehr funktionieren:

public class Bankkonto {
    private double guthaben; // jetzt private!
}

public class Test {
    public static void main(String[] args) {
        Bankkonto k = new Bankkonto();

        k.guthaben = k.guthaben - 10000; // hier würde Eclipse einen Fehler anzeigen!
    }
}

Aus der main-Methode heraus (welche in der Klasse Test steht) kann also nicht mehr auf ein private-Attribut der Klasse Bankkonto zugegriffen werden.

Um den Kontostand nun verändern zu können, muss eine Methode abheben programmiert werden:

public class Bankkonto {
    private double guthaben; // jetzt private!

    public void abheben(double betrag) {
        if( betrag < guthaben ) {
            guthaben = guthaben - betrag;
        }
        else {
            System.out.println("Guthaben reicht nicht aus!");
        }
    }
}

public class Test {
    public static void main(String[] args) {
        Bankkonto k = new Bankkonto();

        [...]

        k.abheben(100);
    }
}

Diese Methode muss natürlich ihrerseits public sein, so dass diese aus der Test-Klasse aufgerufen werden kann. Innerhalb der abheben-Methode können dann verschiedene Bedingungen überprüft werden, hier beispielsweise, ob das Guthaben ausreicht.

Zusammenfassung

Attribute und Methoden, welche als public angelegt wurden, können von überallher, also von allen anderen Klassen aufgerufen bzw. benutzt werden. Das bedeutet insbesondere, dass diese Attribute und Methoden innerhalb der main-Methode benutzt werden können.

Dem gegenüber stehen Attribute und Methoden, die als private angelegt wurden. Diese können nur innerhalb der Klasse benutzt werden, in der diese Attribute/Methoden programmiert wurden.

lesenden Zugriff auf Attribute

Mittels den Schlüsselwörtern public und private können jedoch nur die generellen Zugriffsrechte auf ein Attribut festgelegt werden. Will man erreichen, dass ein Attribut von einer fremden Klasse nicht änderbar, jedoch aber immerhin lesbar ist, so müssen wir uns mit einer sogenannten get-Methode behelfen.

Hierbei handelt es sich um eine Methode, welche lediglich den Wert des Attributes als Rückgabewert zurückgibt. Oft wird diese Methode deshalb getATTRIBUTNAME benannt, deshalb der Name "get-Methode":

public class Bankkonto {
    private double guthaben; // jetzt private!

    public double getGuthaben() {
        return guthaben;
    }
}