Java Übung & Lösung: Java Objekte in Java Methoden übergeben
In dieser Java Übung möchte ich dir zeigen, dass du auch in Klassenmethoden auf Objekte und deren Instanzvariablen zugreifen kannst.
Schau dir dazu einmal diesen Java Code an.
public class Umwandlung {
private int x;
public int getX() { // getter Methode
return x;
}
public void setX(int x) { // setter Methode
this.x = x;
}
public static void main(String[] args) {
Umwandlung umwandler = new Umwandlung(); // neues Objekt wird erzeugt
umwandler.setX(22); // Zuweisung der Instanzvariablen
System.out.println(umwandler.getX()); // Rückgabe des Wertes
}
}
Die Java Klasse verfügt über eine Instanzvariable mit den originellen Namen x.
Den Wert der Variablen kannst du über eine setter-Methode festlegen.
Über die getter-Methode kann der Wert erfragt und zurückgegeben werden.
Zu Testzwecken wurde in der main-Methode ein Objekt erzeugt.
Und der Wert der Instanzvariablen wurde für dieses Objekt auf 22 festgelegt.
Die Bildschirmausgabe ruft den getter auf und gibt somit den Wert zurück.
Soweit alles klar.
Jetzt kommt etwas, was du so eigentlich nie machst und sonst auch nicht machen solltest.
Es dient lediglich dazu, dass du den Umgang mit den Java Methoden übst.
Lange Rede- kurzer Sinn…
Schreibe den getter und setter um.
Und zwar – biete die getter- und die setter Methode als statische Methode an.
Die Lösung dieser Java Übung liegt im Überladen der Methoden.
Du musst beide Methoden überladen.
Beim Überladen von Java Methoden ist es wichtig, dass sich die Parameterlisten der Methoden unterscheiden.
Der Setter verlangt immer einen Parameter.
Dieser entspricht immer dem Datentyp der Instanzvariable.
Im Methodenrumpf erfolgt die Zuweisung durch die this referenz.
public class Umwandlung {
private int x; //Instanzvariable vom Datentyp Integer
public void setX(int x) { // setter Methode erwartet einen Parameter vom Datentyp der Instanzvariablen
this.x = x; //Zuweisung über die this-Referenz
}
}
Wenn du die setter-Methode als statische bzw. Klassenmethode anbietest, musst du die Parameterliste erweitern.
Und zwar musst du dann als Parameter eine Referenzvariable vom Datentyp der Java Klasse anbieten.
Im Methodenrumpf erfolgt dann die Zuweisung nicht über die this-Referenz.
Sondern du greifst auf die übergebene Referenzvariable zu.
Und so sieht der Java Code dazu aus.
public class Umwandlung {
private int x; //Instanzvariable vom Datentyp Integer
static public void setX(Umwandlung u, int x) { // Referenzvariable wird übergeben
u.x = x; //Zugriff auf die Instanzvariable der Referenzvariablen
}
}
Analog zum setter kannst du auch die getter-Methode wandeln
Der getter erwartet im nichtstatischen Kontext keinen Parameter.
Als statische Methode musst du ebenfalls ein Objekt bzw. eine Referenzvariable übergeben.
Der Java Code zum getter würde dann so aussehen:
public class Umwandlung {
private int x; //Instanzvariable vom Datentyp Integer
static public int getX(Umwandlung u) { // statische getter Methode mit Referenz
return u.x; //Rückgabe des Wertes der Referenz
}
}
Und jetzt kannst du in der main-Methode ein Objekt erzeugen.
Und dann rufst du die statischen Java Methoden auf.
Achte darauf, dass du in der Parameterliste die Referenzvariable übergibst.
Und der komplette Code mit allen Klassen- und Instanzmethoden:
public class Umwandlung {
private int x; //Insstanzvariable vom Datentyp Integer
public int getX() { // getter Methode
return x;
}
static public int getX(Umwandlung u) { // statische getter Methode mit Referenz
return u.x; //Rückgabe des Wertes der Referenz
}
public void setX(int x) { // setter Methode erwartet einen Parameter vom Datentyp der Instanzvariablen
this.x = x; //Zuweisung
}
static public void setX(Umwandlung u, int x) { // Referenzvariable wird übergeben
u.x = x; //Zugriff auf die Instanzvariable der Referenzvariablen
}
public static void main(String[] args) {
Umwandlung umwandler = new Umwandlung(); // neues Objekt wird erzeugt
setX(umwandler,22); // Methodenaufruf mit zwei Argumenten
System.out.println(umwandler.getX(umwandler)); // Rückgabe des Wertes
}
}
Zusammenfassung:
- Du kannst statischen, aber auch Instanzmethoden Objekte übergeben.
- Wenn du im Methodenrumpf einer Klassenmethode auf eine Instanzvariable zugreifen möchtest, musst du auf die übergebene Referenz per Punktnotation zugreifen.
- Die getter und setter werden im Normalfall nur als Instanzmethoden angeboten.
Diese nichttypische Umwandlung ist lediglich als Beispiel für diese Java Übung gedacht gewesen.