getter/setter umstellung

lulas[]args

Mitglied
Heyho!
Ich habe ein Programm geschrieben und da ich mir anfangs noch unsicher war, habe ich es erst mit public Variablen gemacht. Jetzt will ich diese im Nachhinein private setzen und mit gettern/settern ausstatten. So weit eig kein Problem die IDE zeigt ja an wo überall die Variablenaufrufart durch get/set ersetzt werden muss.

Jedoch habe ich 2 Probleme:

1. Ich habe eine Superklasse, die momentan alle Instanzvariablen enthält und dazu 2 Subklassen, welche momentan keine eigenen Variablen haben.

Frage: Muss ich die Variablen jetzt komplett in die Subklassen kopieren/überschreiben oder aus der Superklasse löschen? Wenn ich sie aus der Superklasse lösche finden meine Methoden sie dort auch nicht mehr.

Und muss ich die Variablen dann in der Superklasse, wie in der Klasse in der ich die main habe über zb.
hase.getFarbe() aufrufen?

2. Ich hatte in meinen Programm als die Variablen public waren in der main Methode (andere Klasse als die vorherigen) eine if Prüfung die die Variablen aus der Superklasse aufgerufen hat, anstelle von meiner folgenden get methode hat es mit spieler1.pos alles geklappt. Jetzt bekomme ich hier die Fehlermeldung: unexpected type, required variable, found value.???:L

Java:
 if (spieler1.springen() == true){ // 
                        if (spieler2.getPos() >= spieler1.getPos()){        // Der Spieler wird genau vor seinen Gegenspieler gesetzt, falls                         
                            spieler1.getPos() = ++spieler2.getPos();        // dieser sich weiter vorn auf dem Spielfeld befindet. 
                            --spieler2.getPos();                            // Beide Spieler auf Position des Gegenspielers + 1
                        }                                                   // Gegenspielerposition - 1
                    }

Danke schonmal!
Ps: Wenn ich mich unklar ausdrücke bitte einfach nachfragen 😉
 
Du musst du Variablen nun in allen Subklassen auch über getter und stter ansprechen... oder du machst die Variablen protected, damit wären sie dann in der Oberklasse sowie allen ableitenden Klassen verfügbar. Du kannst sie aber in der Superklasse lassen und musst sich auch nicht in die Subklassen kopieren.
 
Code:
--spieler2.getPos();
Ich denke, hier karkt es. Um die Position zu dekrementieren, müsstest du den setter verwenden (abgesehen davon, was bitte ist pos--? Wird da die x- oder die y-Koordinate dekrementiert?)

EDIT: achso, gleiches gilt natürlich für
Code:
++spieler2.getPos();
 
Aber ich spreche sie dann einfach über den Namen an, den ich dem Objekt der Subklasse beim Erzeugen gegeben habe : also zb spieler1 = new Mensch(); spieler1.getPos()

warum kann ich diesen Part nich ausführen?

spieler1.getPos() = ++spieler2.getPos();
--spieler2.getPos();

ohne getter konnte ich so die position von 1 und 2 gleich position von 2 +1 setzen und danach die von 2 wieder erniedrigen.

muss da irgendwie sie set Methode noch mit rein um den selben Effekt erzielen zu können?

Danke!

PS: Pos ist die Position des Spielers zwischen 1 und 40
 
Weil getPos nur eine Referenz auf deinen eigentlichen int ist und nicht der int selbst... getPos sagt sozusagen nur, das irgendwo im Speicher eine Variable rumliegt, die pos heißt... mehr nicht.

EDIT: Du musst also wohl oder übel sowas verwenden:
Java:
spieler.setPos(spieler.getPos() + 1)
bzw.
[JAVA=2]spieler.setPos(spieler.getPos() - 1)[/code]

EDIT: Alternativ kannst du natürlich auch einfach statt eines setters zwei Methoden schreiben: moveLeft und miveRight, die dir die Position dann jeweils berechnen...
 
Zuletzt bearbeitet:
Du kannst in einer Subklasse mit getter/setter auf die Variablen der Superklasse zugreifen. Allerdings, wenn die Variablen "protected" statt "private" wären, könntest Du auch direkt darauf zugreifen. Die Superklasse kann auf seine eigenen Instanzvariable direkt zugreifen oder über seine eigenen getter/setter (obwohl letzteres manchmal empfohlen wird).

Der Rückgabewert des Ausdrucks ++a ist a+1. Zusätzlich wird die Variable a inkrementiert und erhält den Wert a+1. Wenn Du ++objekt.getA() schreibst, kann keine Variable inkrementiert werden, weil keine da ist, daher die Fehlermeldung des Compilers. Du könntest a=objekt.getA() schreiben und danach ++a machen. Oder Du schreibst einfach objekt.getA()+1, wenn Du keine extra Variable brauchst. Ähnlich ist es bei objekt.getA() = 1. Was da links vom = steht ist keine Variable und kann deshalb keinen Wert zugewiesen bekommen (dafür ist ja der setter da).

Gruß,
André
 
Ich denk ich habs, hab den rest noch nich geändert aber an der Stelle bekomm ich schon mal keinen Fehler mehr!
Java:
if (spieler2.getPos() >= spieler1.getPos()){                               
                 spieler2.setPos(spieler2.getPos() + 1);
                 spieler1.setPos(spieler2.getPos());                                       
                 spieler2.setPos(spieler2.getPos() - 1);                       
           }
 

Zurück
Oben