• Home
  • |
  • Blog
  • |
  • Java Tutorial #21 – Java Attribute

Java Tutorial #21 – Java Attribute

Zuletzt aktualisiert: Januar 23, 2024

Heute werden wir in Java Attribute genauer unter die Lupe nehmen. Dabei wirst du erfahren, was Attribute sind, welchen Zweck sie erfüllen und wie man diese anschließend in der Praxis einsetzen kann. Zum Schluss werden wir uns ansehen, was es mit den sogenannten Gettern und Settern auf sich hat, die für den Einsatz unserer Attribute eine entscheidende Rolle spielen.

Inhaltsverzeichnis

1. Was wir bereits wissen

In den vergangenen Beiträgen sind wir bereits ausführlich auf die Objektorientierung eingegangen, wobei wir gelernt haben, dass sich eine Klasse zum einen aus Attributen und zum anderen aus Methoden zusammensetzt. Was man zum Thema Methoden wissen sollte, haben wir schon im letzten Blogartikel im Detail erfahren. Jetzt ist es also an der Zeit, herauszufinden, was es mit den Eigenschaften bzw. Attributen in Java auf sich hat. Wie bereits erwähnt, kannst du diese beiden Begriffe synonym verwenden. In diesem Artikel werde ich größtenteils auf den Begriff „Attribute“ zurückgreifen.

2. Was sind Java Attribute?

Man verwendet in Java Attribute, um Klassen zu beschreiben. In unserem Beispiel haben wir bereits gesehen, dass man diese in Form von Variablen definiert, die das Objekt charakterisieren.

Dafür haben wir eine Klasse Car erstellt, welche ein Auto darstellen soll. Eigenschaften, die ein Auto beschreiben, sind beispielsweise dessen Farbe oder PS-Anzahl.

Um es nochmal kurz zu wiederholen: Methoden hingegen sind für die Funktionalität zuständig.

3. Wie unterscheiden sich in Java Attribute von Variablen?

Diese Frage stellt sich, weil wir Attribute schließlich genau wie gewöhnliche Variablen definieren. Der entscheidende Unterschied ist allerdings der Sichtbarkeitsmodifizierer.

Von den Sichtbarkeitsmodifizierern hast du in den vergangenen Beiträgen bereits des Öfteren gelesen, allerdings sind wir noch nicht wirklich auf deren Auswirkung eingegangen. Das werden wir im heutigen Blogartikel nachholen.

4. Die Sichtbarkeitsmodifizierer

Bisher haben wir die Sichtbarkeitsmodifizierer private und public kennengelernt. Diese kommen immer zum Einsatz, wenn wir sauber objektorientiert programmieren möchten. Das bedeutet, dass wir in der Objektorientierung spezifische Klassen erstellen, wie etwa die Klasse Car aus unserem aktuellen Programm.

Ich habe schon erwähnt, dass man darin nur Methoden und Attribute definieren sollte, die sich auch wirklich auf die Klasse Car beziehen. Dazu gehört die Farbe des Autos. Die Farbe eines Hauses, das sich beispielsweise in einem Computerspiel neben dem Auto befindet, gehört hingegen nicht dazu. Diese sollte man als Attribut in der Klasse Haus definieren.

Mithilfe der Klassen stellen wir sicher, dass wir alles sauber voneinander trennen und die Dinge zusammenfassen, die zusammengehören. Dabei sollten wir darauf achten, die Werte wirklich sicher von den anderen Klassen abzuschirmen.

5. Wofür ist der Sichtbarkeitsmodifizierer private?

Mithilfe des Sichtbarkeitsmodifizierers private sorgen wir dafür, dass von außerhalb der Klasse niemand auf dieses Attribut zugreifen kann. Das möchte ich dir an dieser Stelle im Programm demonstrieren.

Auf der Abbildung kannst du die Klasse Car erkennen, in der wir bisher drei Attribute definiert haben. Wie bereits erwähnt, definieren wir Attribute genau wie Variablen und setzen lediglich vor diese noch einen Sichtbarkeitsmodifizierer. Im Fall unseres Beispiels ist dieser private:

Der Sichtbarkeitsmodifizierer private

Was hat das nun für Auswirkungen? Um das herauszufinden, setzen wir eines der Attribute zunächst einmal auf public.

Wir setzen die Java Attribute zunächst auf public

6. Was bedeutet public in Java?

Das Schlüsselwort public bedeutet, dass man jetzt auch von außerhalb der Klasse auf das Attribut zugreifen kann. Um das zu testen, bewegen wir uns in die Main-Methode, in der wir bereits ein Objekt von der Klasse Car erstellt haben, nämlich car1. Auf diesem werden wir jetzt das Attribut aufrufen, was wiederum genauso umgesetzt wird wie bei einer Methode.

Wir schreiben dafür zunächst den Namen des Objekts, gefolgt von einem Punkt und wählen dann das jeweilige Attribut aus:

So können wir in Java Attribute auf Objekten aufrufen, wenn sie public sind

Im Fall unseres Beispiels wählen wir das Attribut color und weisen diesem anschließend einen Wert zu. Dieser kann zum Beispiel die Farbe Gelb sein.

car1.color = "Gelb";

Sobald wir den Wert zugewiesen haben, verschwindet auch schon die Fehlermeldung. Wenn wir das Programm nun starten, führt es zunächst nur die Methode aus:

Das Programm führt zunächst nur die Methode aus

Um das Attribut auf der Konsole auszugeben, schreiben wir die folgende Zeile Code und führen das Programm anschließend aus:

System.out.println(car1.color);

Das Attribut wird auf der Konsole ausgegeben

7. Die Auswirkung von private in der Praxis

An dieser Stelle werden wir den Sichtbarkeitsmodifizierer auf private ändern. „private“ bedeutet, dass ausschließlich die Klasse Zugriff auf das Attribut besitzt. Wir können damit also nur innerhalb von dieser Klasse auf das Attribut color zugreifen.

Wir ändern die Sichtbarkeitsmodifizierer der Java Attribute auf private

Wenn wir uns die Main-Methode nun mal genauer ansehen, fällt auf, dass sich diese in einer anderen Klasse befindet. Nämlich in der Klasse Program:

Die Main-Methode befindet sich in der Klasse Program

Genau aus diesem Grund sehen wir schon die erste Fehlermeldung, sobald wir den Cursor auf das Symbol neben der Zeilennummer 8 bewegen:

„The field Car.color is not visible”

Diese Fehlermeldung sagt aus, dass wir keine Sichtbarkeit besitzen, weil der Sichtbarkeitsmodifizierer private das Attribut abschirmt. Wir können dadurch also nur innerhalb der Klasse Car darauf zugreifen, nicht aber von anderen Klassen aus.

Deshalb funktioniert der Code so nicht mehr. Die drive-Methode hingegen konnten wir problemlos aufrufen, da wir sie auf public gesetzt hatten:

Die drive-Methode lässt sich nur aufrufen, weil wir sie auf public gesetzt haben

Wir können damit also von außen darauf zugreifen. Setzen wir allerdings auch bei dieser Methode den Sichtbarkeitsmodifizierer auf private und speichern das Programm, funktioniert auch diese nicht mehr. 

Der ganze Sinn, der sich hinter den Sichtbarkeitsmodifizierern verbirgt, ist also, damit zu regeln, wer worauf Zugriff erhält.

8. Warum man in Java Attribute nicht auf public setzen sollte

Bei der objektorientierten Programmierung setzt man in Java Attribute niemals auf public, sofern man sich an einen sauberen Programmierstil halten möchte. Durch public ist nämlich, wie du bereits sehen konntest, jedem Zugriff gewährt, wodurch sich die Werte von überall im Programm aus manipulieren lassen.

Und das ist natürlich extrem gefährlich. Wenn von außen unkontrolliert jegliche Werte in einer Klasse geändert werden, können an anderen Stellen im Programm Probleme auftreten, weil Werte plötzlich anders sind als erwartet.

Aus diesem Grund setzen wir Attribute immer auf private. Sobald du dich den fortgeschrittenen Themen der Java-Programmierung widmest, werden noch weitere Sichtbarkeitsmodifizierer wie beispielsweise protected zum Vorschein kommen.

Damit haben wir den Vorteil, dass das Ganze noch mit vererbt wird. Das Thema Vererbung werden wir auch innerhalb dieser Tutorialreihe noch anschneiden. Die weiteren Themen gehören dann schon zu den fortgeschrittenen Konzepten.

In diesem Crashkurs möchte ich dir die Grundlagen so vermitteln, dass du am Ende mit einem guten Fundament in die Programmierung starten kannst. Wir werden uns also nicht auf jedes einzelne Detail konzentrieren.

9. Wie können wir trotz private noch auf die Attribute zugreifen?

Wenn wir an dieser Stelle wieder zu den Attributen zurückkehren, sehen wir ein Problem. Jetzt, wo wir diese als private definiert haben, um sie sauber zu kapseln, können wir natürlich nicht mehr von außen darauf zugreifen.

Was ist aber, wenn wir beispielsweise die Farbe des Autos ausgeben oder den Wert von HorsePower in der Main-Methode ändern möchten?

In diesem Fall kommen die sogenannten Getter und Setter ins Spiel.

10. Was sind Getter und Setter?

Bei den Gettern und Settern handelt es sich um Hilfsmethoden, die sich immer auf ein Attribut beziehen. Das bedeutet, dass jedes Attribut (Beispiel: color) einen Getter und einen Setter besitzen kann.

Diese Hilfsmethoden definieren wir in der Klasse Car und sie ermöglichen uns, von außen kontrolliert auf die Attribute zuzugreifen.

Es gibt zwei Möglichkeiten, Getter und Setter zu definieren. Entweder wir schreiben die Methode selbst oder wir lassen sie in Eclipse automatisch generieren. Wir entscheiden uns nun für Letzteres.

11. Getter und Setter automatisch generieren lassen

Dafür klicken wir auf „Source“ und anschließend auf „Generate Getters and Setters“:

In Eclipse kann man Getter und Setter für Java Attribute automatisch generieren lassen

Im Fenster, das sich daraufhin öffnet, können wir ankreuzen, für welche Attribute wir Getter und Setter erzeugen lassen möchten. Außerdem lassen sich Getter und Setter dort einzeln abwählen:

Nun kann man wählen, für welche Java Attribute man Getter und Setter erzeugen möchte

Damit kannst du auch gerne selbst etwas herumexperimentieren. Im Anschluss klicken wir auf „OK“.

Wie du siehst, hat uns das Programm nun automatisch mehrere Methoden generiert, bei welchen es sich um die Getter und Setter handelt:

Das Programm hat uns automatisch mehrere Methoden generiert

Die Methoden sehen immer gleich aus. Es ist eine Konvention, bei der Get-Methode das Wort „get“ zu schreiben und anschließend den Namen des Attributs beginnend mit einem Großbuchstaben anzugeben.

Da wir oben das Attribut color definiert haben, schreiben wir auch in der Get- und Set-Methode direkt nach den Wörtern get und set den Namen color, allerdings wieder mit einem großen Anfangsbuchstaben. Das lässt sich in der Abbildung oben erkennen.

Wie du siehst, haben die Methoden relativ simple Funktionen. Die get-Methode gibt uns beispielsweise einfach das Attribut zurück:

public String getColor() {
        return color;
}

Der set-Methode übergeben wir einen String-Wert von color, die dem Attribut diesen Wert zuweist.

Damit haben wir eine Möglichkeit gefunden, die Kapselung zu umgehen.

12. Mithilfe der get- und set-Methoden Werte zuweisen und ausgeben

Wir können jetzt in der Klasse Program innerhalb der Main-Methode von car1 den Wert von color setzen. Dafür schreiben wir nicht mehr „car1.color =“, sondern stattdessen folgendes:

In der Main-Methode können wir von car1 den Wert von color setzen

Wir schreiben also car1.setColor, rufen damit die Methode auf und übergeben darin einen String, wie die Farbe Rot zum Beispiel.

Wenn wir den Wert noch ausgeben lassen möchten, schreiben wir in die println-Methode darunter nicht „car1.color“, sondern „car1.getColor()“:

System.out.println(car1.getColor());

Führen wir das Programm jetzt aus, sehen wir, dass es funktioniert und „Rot“ ausgegeben wird:

Rot wird nun ausgegeben

Mit den Gettern und Settern können wir kontrolliert auf das Attribut zugreifen. Kontrolliert deshalb, weil wir innerhalb des Getters beispielsweise auch noch definieren können, was beachtet werden soll und welche möglichen Validierungen es gibt.

Wir könnten also beispielsweise in der Set-Methode noch eine if-Abfrage einbauen und festlegen, dass das Attribut nur gesetzt werden soll, wenn es aus fünf Buchstaben besteht. Oder es soll nur gesetzt werden, wenn es das Wort „Rot“ oder das Wort „Gelb“ ist.

Dort können wir also von innerhalb der Klasse kontrollieren, was zulässig ist. Damit haben wir wieder einen geregelten Rahmen und die Möglichkeit, sauber auf die Attribute zuzugreifen.

13. Zusammenfassung

Zusammengefasst haben wir uns in diesem Beitrag mit dem Sinn hinter Attributen und Sichtbarkeitsmodifizierern beschäftigt und die sogenannten Getter und Setter kennengelernt. Bei Gettern und Settern handelt es sich um Hilfsmethoden, die man entweder selbst schreiben oder von Eclipse automatisch generieren lassen kann. Letzteres funktioniert über „Source“ und „Generate Getters und Setters“.

Du hast damit wieder weitere äußerst wichtige Grundlagen der objektorientierten Programmierung in Java gelernt!