Verständnisfrage zu Objekten u. Übergabeparameter

rh3ns3n

Mitglied
Hey Leute!
Ich schreibe gerade an einem kleinen Projekt.
Das was mein Programm tun soll macht es, aber tun sich immer mal ein paar Fragen auf.
Vllt ist jemand so freundlich und hilft mir eine Antwort zu finden.
Zur Frage:
Ich habe mir eine GUI gebastelt und beziehe über mehrere TextFields und ComboBoxenWerte .
Als dann alles gepasst hat, wollte ich diese Werte in eine Klasse auslagern, um eben sämtliche Daten, die ich brauche in einem Objekt zu haben.

Da ich mir noch ein wenig unsicher bin, habe ich verschiedene Mechanismen ausprobiert, um an mein Ziel zu gelangen. Dabei kam mir folgende Frage auf, die ich gerne für mein näheres Verständnis beantworten können würde.

Folgende 2 Beispiele bringen mich nämlicht exakt an den gleichen Punkt:
Java:
//die funktion dient nur dazu die werte zu überprüfen
//und ist in Class XY


public void printObject(){
        
         System.out.println("print: " + this.time);
         System.out.println("print  " + this.day);
         System.out.println("print  " + this.room);
     }

//Jetzt rufe ich von Class AB die Funktion auf
//mit einer Instanz app1 aus aus class XY

Appointment app1 = new Appointment();
app1.printObject();

und

Java:
//gleiches Spiel
//Class YX

public void printObject(Appointment app){
        
         System.out.println("print: " + app.time);
         System.out.println("print  " + app.day);
         System.out.println("print  " + app.room);
     }

//Und Class AB macht das
Appointment app1 = new Appointment();
app1.printObject(app1);

Bei der ersten Variante verwende ich keinen Übergabeparameter und bei der zweiten übergebe ich das Objekt. Ergebnisse sind in diesem Fall gleich.

Liegt es daran, dass "this" sich quasi das Objekt, in diesem Fall app1, besorgt und sich so verhält als wie in Variante zwei mit dem Objekt als Übergabeparameter oder lieg ich völlig daneben ? 😀

Oder,was mir noch einfällt, liegt es daran, dass der Aufruf der Funktion so oder so über die Instanz app1 geschieht (app1.printObject()) und daher die Werte richtig zugewiesen werden?!

Grüße!
 
It doch relativ einfach. app1 ist die Referenz zu deinem Object der Klasse Appointment. Alle Methoden innerhalb dieser Klasse kennen sich natürlich selber und natürlich auch ihre Instanzvariablen. Du könntest im ersten Beispeil das this. auch weglassen und es würde immer noch funktionieren.
Der zweite Fall kann eigentlich nur funktionieren, wenn due deine Instanzvariablen time, day und room als prublic deklariert hast. Denn nun versucht die Methode auf irgendein Object der Klasse Annotation zuzugreifen und dort diese Variablen auszulesen. Mache die Variablen mal private (wie es sich eigentlich auch gehört) dann bekommst du einen Fehler.
Die zweite Lösung ist also quark und sollte so nicht benutzt werden. Funktionieren tut sie halt nur deshalb weil man von aussen auf die variablen zugreifen darf und in deinem Fall die Referenz die du an die Methode übergibst genau die gleiche ist wie this.

Gruß

Claus
 
Der zweite Fall kann eigentlich nur funktionieren, wenn due deine Instanzvariablen time, day und room als prublic deklariert hast. Denn nun versucht die Methode auf irgendein Object der Klasse Annotation zuzugreifen und dort diese Variablen auszulesen. Mache die Variablen mal private (wie es sich eigentlich auch gehört) dann bekommst du einen Fehler.
Die zweite Lösung ist also quark und sollte so nicht benutzt werden. Funktionieren tut sie halt nur deshalb weil man von aussen auf die variablen zugreifen darf und in deinem Fall die Referenz die du an die Methode übergibst genau die gleiche ist wie this.
Nein, das funktioniert genauso, wenn die private sind, die Methode ist ja immer noch in der gleichen Klasse, von außen wird da auf nichts zugegriffen
 
Nein, das funktioniert genauso, wenn die private sind
Die Klassenangaben in seinem Codeschnipsel sind etwas irreführend und können so eigentlich nicht stimmen. Deshalb könnte der Eindruck entstehen das zweite Beispiel könnte nicht funktionieren. Aber entweder printObject(...) ist eine Methode der Klasse XY, dann kann schon der Aufruf so gar nicht funktionieren. Oder sie ist eine Methode der Klasse Appointment und dann funktioniert auch das zweite Beispiel (auch wenn die Variablen private sind).
 
Die Klassenangaben in seinem Codeschnipsel sind etwas irreführend und können so eigentlich nicht stimmen. Deshalb könnte der Eindruck entstehen das zweite Beispiel könnte nicht funktionieren. Aber entweder printObject(...) ist eine Methode der Klasse XY, dann kann schon der Aufruf so gar nicht funktionieren. Oder sie ist eine Methode der Klasse Appointment und dann funktioniert auch das zweite Beispiel.
Code ist halt immer richtiger als die Kommentare, die sind hier Unsinn 😉
 
Danke Leute 🙂
Ja, das nächste mal poste ich besseren Code.
Die Klassennamen waren verwirrend.

Ich hab das Problem auch mit euren Anregungen gelöst.
Der Fehler war, dass ich die Variablen nicht private gesetzt habe und das deshalb funktoiniert hat.
Habe nun einfach die Variablen auf private gesetzt und set/get Methoden verwendet.
Jetzt ist es glaube so wie es sein soll.
Vielen Dank für eure flotten Antworten.
 
Ich hab das Problem auch mit euren Anregungen gelöst.
Der Fehler war, dass ich die Variablen nicht private gesetzt habe und das deshalb funktoiniert hat.
Habe nun einfach die Variablen auf private gesetzt und set/get Methoden verwendet.
Nein, der Scope war kein Problem, selbst mit private funktioniert dein obiges Programm ohne Problem 😉
 

Zurück
Oben