Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| programmierung:klassen:public_private [2024/07/03 14:50] – created swe | programmierung:klassen:public_private [2025/12/20 14:53] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | # public und private |
| - | Jedes Attribut einer Klasse und jede Methode kann eine der Eigenschaften | + | 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 | + | ## Benutzung von Attributen außerhalb der Klasse |
| - | '' | + | |
| - | '' | + | `public`: ja |
| - | Das bedeutet, dass Attribute, die '' | + | `private`: nein |
| - | So könnten Werte eingetragen werden, die ich als Programmierer gar nicht zulassen möchte, bsp. einen positives Dispo-Wert in einer Klasse '' | + | |
| - | <WRAP group> | + | Das bedeutet, dass Attribute, die `public` sind, im konkreten |
| - | <WRAP half column> | + | Programmablauf bsp. in einer `main`-Methode, |
| - | < | + | werden können - mit allen Konsequenzen, |
| + | Werte eingetragen werden, die ich als Programmierer gar nicht zulassen | ||
| + | möchte, bsp. einen positives Dispo-Wert in einer Klasse `Konto`. | ||
| + | |||
| + | \<WRAP group\> \<WRAP half column\> | ||
| + | |||
| + | ``` java | ||
| public class Konto { | public class Konto { | ||
| | | ||
| Line 24: | Line 29: | ||
| | | ||
| } | } | ||
| - | </ | + | ``` |
| - | </ | + | |
| - | <WRAP half column> | + | \</ |
| - | < | + | |
| + | \<WRAP half column\> | ||
| + | |||
| + | ``` java | ||
| public class Main { | public class Main { | ||
| public static void main(String[] args) { | public static void main(String[] args) { | ||
| Line 38: | Line 45: | ||
| } | } | ||
| } | } | ||
| - | </ | + | ``` |
| - | </ | + | |
| - | </ | + | |
| - | Hier wird in der '' | + | \</ |
| - | ===== Attribut privat setzen ===== | + | Hier wird in der `Main`-Klasse ein Wert für `Dispo` eingetragen, |
| + | 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 '' | + | 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 | ||
| + | `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. | ||
| - | <WRAP group> | + | \<WRAP group\> \<WRAP half column\> |
| - | <WRAP half column> | + | |
| - | < | + | ``` java |
| public class Konto { | public class Konto { | ||
| | | ||
| Line 61: | Line 75: | ||
| | | ||
| } | } | ||
| - | </ | + | ``` |
| - | </ | + | |
| - | <WRAP half column> | + | \</ |
| - | < | + | |
| + | \<WRAP half column\> | ||
| + | |||
| + | ``` java | ||
| public class Main { | public class Main { | ||
| public static void main(String[] args) { | public static void main(String[] args) { | ||
| Line 75: | Line 91: | ||
| } | } | ||
| } | } | ||
| - | </ | + | ``` |
| - | </ | + | |
| - | </ | + | |
| - | ===== Getter und Setter ===== | + | \</ |
| - | 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**! | + | ## Getter und Setter public setzen |
| - | Hier kommt das Konzept der sogenannten | + | 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 | ||
| - | Statt dass ich das Attribut | + | Hier kommt das Konzept der sogenannten **Getter** und |
| + | **Setter**-Methoden zum Tragen. | ||
| + | |||
| + | Statt dass ich das Attribut | ||
| + | öffentlich (public) an, die das Setzen (Set) oder Auslesen (Get) von | ||
| + | Attributen übernimmt. | ||
| Was ist nun der große Unterschied zum direkten Bearbeiten? | 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 | + | 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 | ||
| + | Programmierer erlange somit Kontrolle über mögliche Werte von | ||
| + | Attributen! | ||
| - | <WRAP group> | + | \<WRAP group\> \<WRAP half column\> |
| - | <WRAP half column> | + | |
| - | < | + | ``` java |
| public class Konto { | public class Konto { | ||
| | | ||
| Line 112: | Line 138: | ||
| | | ||
| } | } | ||
| - | </ | + | ``` |
| - | </ | + | |
| - | <WRAP half column> | + | \</ |
| - | < | + | |
| + | \<WRAP half column\> | ||
| + | |||
| + | ``` java | ||
| public class Main { | public class Main { | ||
| public static void main(String[] args) { | public static void main(String[] args) { | ||
| Line 127: | Line 155: | ||
| } | } | ||
| } | } | ||
| - | </ | + | ``` |
| - | </ | + | |
| - | </ | + | \</WRAP\> \</WRAP\> |