public und private
Jedes Attribut einer Klasse und jede Methode kann eine der Eigenschaften public oder private erhalten. Hat sie keine davon, gilt sie standardmäßig als public.
Benutzung von Attributen außerhalb der Klasse
public: ja
private: nein
Das bedeutet, dass Attribute, die public sind, im konkreten Programmablauf bsp. in einer main-Methode, ausgelesen und geschreiben werden können - mit allen Konsequenzen, die dahinter stecken. So könnten Werte eingetragen werden, die ich als Programmierer gar nicht zulassen möchte, bsp. einen positives Dispo-Wert in einer Klasse Konto.
public class Konto { String inhaber; double guthaben; double dispo; ... }
public class Main { public static void main(String[] args) { Konto giro = new Konto(); giro.inhaber = "Homer"; giro.dispo = 1000; ... } }
Hier wird in der Main-Klasse ein Wert für Dispo eingetragen, der nicht zulässig ist. Wie kann man solch unerwünschtes Zugreifen auf Attribute verhindern?
Attribut privat setzen
Wenn ich selbst bestimmen möchte, wie auf bestimmte Attribute zugegriffen wird, muss ich das Attribut nach außen schützen, indem ich es auf private setze. Damit geht jeder Zugriff nach außen verloren. Probiere das Beispiel aus, indem das Attribut dispo das Schlüsselwort private vorangestellt wird. Du wirst sehen, dass es in der Main eine Fehlermeldung gibt. Schon ein Text-Editor mit Java-Extension wird sich über nicht Nicht-Sichtbarkeit beschweren.
Getter und Setter public setzen
Nun wäre es ein ziemlich sinnloses Programm, wenn ich bestimmte Attribute im Programmablauf nicht verändern könnte. Als Programmierer möchte ich ja, dass Attribute ja nach Objekt unterschiedlich sein können. Ich möchte das aber eben nach meinen eigenen Bedingungen!
Hier kommt das Konzept der sogenannten Getter und Setter-Methoden zum Tragen.
Statt dass ich das Attribut public mache, biete ich eine Methode öffentlich (public) an, die das Setzen (Set) oder Auslesen (Get) von Attributen übernimmt.
Was ist nun der große Unterschied zum direkten Bearbeiten?
Ich kann in den Getter und Setter-Methoden meinen eigenen Bedingungen implementieren! So kann ich für das Beispiel des Kontos festlegen, dass ein Attribut dispo niemals positiv sein darf. Ich als Programmierer erlange somit Kontrolle über mögliche Werte von Attributen!
public class Konto { String inhaber; double guthaben; private double dispo; public void setDispo(int x){ if (x > 0){ this.dispo = -1 * x; } else{ this.dispo = x; } } ... }
public class Main { public static void main(String[] args) { Konto giro = new Konto(); giro.inhaber = "Homer"; giro.setDispo(1000); ... } }