Kapselung getter & setter

Käthe

Mitglied
Hallo zusammen,

ich bin Anfänger und möchte zur Übung folgende Aufgabe lösen.

Aufgabenstellung: Berechnen Sie die Summe von 17 und 4 und geben Sie das Ergebnis aus.

Das ganze möchte ich mit gettern & settern lösen.

In der Console wird als Ergebnis immer 0 ausgegeben.

Kann mir jemand sagen, was ich da falsch mache? Irgendwie habe ich das mit der Objekterstellung und den gettern und settern doch wohl noch nicht richtig verstanden.

Java:
class Berechnen {
   private int zahl1;
   private int zahl2;
   private int ergebnis;
 
   public void setZahl1(int zahl1){
     this.zahl1 = zahl1;
   }
   public void setZahl2(int zahl2){
     this.zahl2 = zahl2;
   }
   public void setErgebnis(int ergebnis){
     this.ergebnis = this.zahl1 + this.zahl2;
   }
 
   public int getZahl1(){
     return zahl1;
   }
   public int getZahl2(){
     return zahl2;
   }
   public int getErgebnis(){
     return ergebnis;
   }
 
 
   public Berechnen(int zahl1, int zahl2){
     this.ergebnis = this.zahl1 + this.zahl2;
   
   }
}

public class Ergebnisberechnung{
   public static void main (String[]args){
  
     Berechnen ergebnis = new Berechnen(17,4);
      //ergebnis.getErgebnis();
    
     System.out.println(ergebnis.getErgebnis());
       
   }
}

Danke für jegliche Hilfe.
Käthe.
 

InfectedBytes

Top Contributor
Java:
   public Berechnen(int zahl1, int zahl2){
     this.ergebnis=this.zahl1+this.zahl2;
   
   }
hier sagst du, dass die Instanzvariable ergebnis gleich der summe der beiden instanzvariablen zahl1 und zahl2 ist.
aber die Instanzvariablen zahl1 und zahl2 wurden noch nicht zugewiesen und sind somit 0.
die Parameter zahl1 und zahl2 beinhalten momentan nur deine Zahlen.
Was du machen kannst:
Java:
   public Berechnen(int zahl1, int zahl2){
     this.zahl1 = zahl1;
     this.zahl2 = zahl2;
     this.ergebnis=this.zahl1+this.zahl2;
   }
 

InfectedBytes

Top Contributor
natürlich, aber dann sind die Instanzvariablen immernoch nicht gesetzt und somit würden zumindest die getter für Zahl 1 und 2 weiterhin 0 zurückgeben
 

SeriousD0nkey

Bekanntes Mitglied
Java:
public Berechnen(int paramZahl1, int paramZahl2){
    zahl1 = paramZahl1;
    zahl2 = paramZahl2;
    ergebnis = zahl1 + zahl2;
}

So würde es ohne this gehen und die Instanzvariablen werden trotzdem gesetzt. Macht aber IMHO so keinen Sinn und wenn du this verwendest, sieht du immerhin direkt, dass es sich auf eine Instanzvariable bezieht.
 

lam_tr

Top Contributor
@InfectedBytes
Ja ok das macht Sinn. Sorry dass ich hier etwas ausschweife, aber Code-Stil hier betrachtet, welches soll man da eher nehmen?

Code:
   public Berechnen(int zahl1, int zahl2){
      this.zahl1 = zahl1;
      this.zahl2 = zahl2;
      this.ergebnis=this.zahl1+this.zahl2;
    }

oder

Code:
   public Berechnen(int zahl1, int zahl2){
      setZahl1(zahl1);
      setzahl2(zahl2);
      this.ergebnis=this.zahl1+this.zahl2;
    }

Viele Grüße
lam
 

VfL_Freak

Top Contributor
Moin,

IMHO sind die Getter und Setter eigentlich für externe Aktionen mit Klassenobjekte gedacht und nicht um die Klassenvariablen zu belegen !!
Ergo: Version 1 und OHNE this (s. o.) !!

Gruß Klaus
 

Dompteur

Top Contributor
Noch etwas anderes. Ich würde folgenden Code entfernen:
Java:
   public void setErgebnis(int ergebnis){
      this.ergebnis = this.zahl1 + this.zahl2;
    }
Erstens braucht man für einen berechneten Wert keinen Setter. Und zweitens ist es sehr un-intuitiv, wenn die Methode etwas anderes tut als der Name suggeriert.
 

VfL_Freak

Top Contributor
Moin,
Noch etwas anderes. Ich würde folgenden Code entfernen:
Java:
   public void setErgebnis(int ergebnis){
      this.ergebnis = this.zahl1 + this.zahl2;
    }
Erstens braucht man für einen berechneten Wert keinen Setter. Und zweitens ist es sehr un-intuitiv, wenn die Methode etwas anderes tut als der Name suggeriert.
Richtig, die ist ja identisch zu "Berechnen" !!

Wie gesagt, die getter und setter brauchst Du nur, wenn Du extern auf ein Objekt der Klasse zugreifen willst!
Von daher reicht DeinEingangspost so völlig aus!
Java:
public class Ergebnisberechnung
{
    public static void main ( String[]args )
    {
        Berechnen ergebnis = new Berechnen(17,4);
        System.out.println( ergebnis.getErgebnis() );
    }
}
Wobei Du allerdings mal dringend über die Namensgebung der Klassen und Objekt nachdenken solltest!
Warum sollte ein Objekt der Klasse Berechnen "ergebnis" heissen ??

Gruß Klaus
 

Käthe

Mitglied
@alle,

Danke für die zahlreichen Antworten und für Eure Mühe.

Ich habe mich nun für diesen Code entschieden, habe alle möglichen von Euch vorgeschlagenene
Varianten ausprobiert, immer mit dem Ergebnis, dass 0 ausgegeben wurde (was auch imme ich
da falsch gemacht habe). Jetzt funktioniert es aber.
Da ich aber anscheindend immer noch einiges durcheinander bringe, werde ich mir eure Vorschläge
nochmal in Ruhe ansehen.

Code:
public Berechnen(int zahl1, int zahl2){
          setZahl1(zahl1);
          setZahl2(zahl2);
          this.ergebnis=this.zahl1+this.zahl2;
        }

@Klaus,
Dir auch nochmal Danke für die Tipps, wann man überhaubt getter und setter braucht, ich bringe da
wirklich noch viel durcheinander und über eine sinnvollere Namensgebung werden ich mir dann auch
mal Gedanken machen.

Ich danke euch und noch einen schönen Tag.

Grüße
Käthe
 

SeriousD0nkey

Bekanntes Mitglied
@Käthe
Warum vorher eine 0 rauskam kann ich dir erklären:
Dein erster Code war ja folgender:
Java:
public Berechnen(int zahl1, int zahl2){
     this.ergebnis = this.zahl1 + this.zahl2;
}
Warum hier Ergebnis 0 ist, liegt daran, dass du nicht die Parameter die du mitgibst (17 und 4) verwendest, sondern auf deine Instanzvariablen der Klasse Berechnen zugreifst (mit dem this beziehst du dich auf die Instanzvariablen der Klasse). Zu diesem Zeitpunkt hast du die Instanzvariablen aber noch nicht gesetzt, sondern lediglich die Parameter (17 und 4) mitgegeben. Und da diese Instanzvariablen vom Typ int sind, ist der default-Wert 0. Und 0 + 0 ergibt ja bekanntlicherweise 0. ;-)

Java:
public Berechnen(int zahl1, int zahl2){
     this.ergebnis = zahl1 + zahl2;
}

So würde es funktionieren. :)

Und deine finale Lösung funktioniert ebenfalls, weil du zwar beim Rechnen wieder die Instanzvariablen verwendest, aber du setzt diese vorher auch mit den Settern. Diese Lösung ist meiner Meinung nach auch die richtige, weil du so auch wirklich die Instanzvariablen verwendest und du später weiter mit diesen Arbeiten könntest.

Java:
public Berechnen(int zahl1, int zahl2){
    setZahl1(zahl1); // hier setzt du die Instanzvariable mit dem Parameter
    setZahl2(zahl2); // hier setzt du die Instanzvariable mit dem Parameter
    this.ergebnis=this.zahl1+this.zahl2;
}

Alternativ funktioniert auch folgende Lösung:
Java:
public Berechnen(int zahl1, int zahl2){
    this.zahl1 = zahl1;
    this.zahl2 = zahl2;
    this.ergebnis=this.zahl1+this.zahl2;
}
Hierbei musst du allerdings nicht extra den Setter aufrufen. Was nun wirklich besser ist, kann ich dir nicht sagen. Eclipse macht normalerweise automatisch die erste Lösung. Diese macht auch Sinn, sobald du irgendeine Validierung (Prüfung der Variable) benötigst. Denn diese kannst du sehr schön in einen Setter verpacke. So kannst du verhindern, dass irgendein anderer Programmierer (oder du selbst :D ) der Variable einen (logisch) ungültigen Wert zuweist.

Hoffe, du verstehst was ich meine. :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
W Getter/Setter Java Basics - Anfänger-Themen 4
KogoroMori21 Objektvariable anderer Klasse übernehmen, Getter/Setter Java Basics - Anfänger-Themen 11
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
KogoroMori21 Getter und Setter Java Basics - Anfänger-Themen 5
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
V getter/setter Garage Java Basics - Anfänger-Themen 12
S getter, setter in abstrakter Klasse oder lieber Unterklassen Java Basics - Anfänger-Themen 4
topi Kapselung getter und setter Java Basics - Anfänger-Themen 5
D Setter/Getter für Instanzvariablen praktisch? Java Basics - Anfänger-Themen 19
S Getter/Setter - Variablenklasse ? Java Basics - Anfänger-Themen 5
S getter and setter Java Basics - Anfänger-Themen 12
L Getter und Setter Java Basics - Anfänger-Themen 2
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
E Methoden Objekte in Methode aufrufen ohne getter und setter? Java Basics - Anfänger-Themen 1
L Klassen - Getter & Setter Methoden Java Basics - Anfänger-Themen 2
D Erste Schritte Java - Setter und Getter Java Basics - Anfänger-Themen 1
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
K Klassen Setter/Getter Java Basics - Anfänger-Themen 3
F OOP Schleifen und Probleme mit Setter und Getter Java Basics - Anfänger-Themen 1
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
J Frage zu Setter u. Getter Java Basics - Anfänger-Themen 7
T Variablen Getter-Setter vs Public Variable? Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
K getter & setter Java Basics - Anfänger-Themen 6
C getter/setter Problem anscheinend Java Basics - Anfänger-Themen 13
G Erste Schritte Getter und Setter Java Basics - Anfänger-Themen 12
B Getter,Setter - Konstruktor überflüssig? Java Basics - Anfänger-Themen 26
N Sprite Methode (Getter, Setter, Konstruktor) Java Basics - Anfänger-Themen 9
S getter/setter aufrufen Java Basics - Anfänger-Themen 9
B Java getter/setter funktioniert nicht! Java Basics - Anfänger-Themen 7
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
F Getter und Setter Java Basics - Anfänger-Themen 4
lulas[]args getter/setter umstellung Java Basics - Anfänger-Themen 6
B Klassen Getter-Setter vor neuem Klassenaufruf - wie? Java Basics - Anfänger-Themen 20
N OOP Getter, Setter und andere Probleme Java Basics - Anfänger-Themen 8
A OOP Getter und Setter Java Basics - Anfänger-Themen 18
L Unterschied Konstruktor / Getter Setter Java Basics - Anfänger-Themen 13
L Setter und Getter für Arrays? Java Basics - Anfänger-Themen 4
N boolean bei Setter und getter methoden Java Basics - Anfänger-Themen 21
J Getter und Setter auch intern benutzen - guter Stil? Java Basics - Anfänger-Themen 31
Houly Setter/Getter MEthoden testen Java Basics - Anfänger-Themen 4
P OOP Getter&Setter Methoden funktionieren nicht Java Basics - Anfänger-Themen 7
H Setter-und-Getter-Konvention Java Basics - Anfänger-Themen 8
V Reflection API - getter und setter Java Basics - Anfänger-Themen 7
-horn- EINE setter/getter klasse aus mehreren klassen befüllen Java Basics - Anfänger-Themen 13
C Getter/Setter Java Basics - Anfänger-Themen 61
H Frage zu getter und setter Java Basics - Anfänger-Themen 5
S Unbenutzte/überflüssige Getter/Setter herausfinden? Java Basics - Anfänger-Themen 2
M getter/setter bei JTextField ? Java Basics - Anfänger-Themen 21
G warum Setter/Getter Java Basics - Anfänger-Themen 25
S In einer Liste auf getter und setter zugreifen Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
O Instanzattribut per Getter Methode zuweisbar, warum? Java Basics - Anfänger-Themen 8
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
M Getter einer PriorityQueue Java Basics - Anfänger-Themen 1
KopaCoda Getter mehrfach aufrufen -> ist das guter code? Java Basics - Anfänger-Themen 3
V Getter Methode Java Basics - Anfänger-Themen 38
T Extrahiertes Objekt durch Getter bekommen Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
A getter Java Basics - Anfänger-Themen 3
T Getter für Array Java Basics - Anfänger-Themen 4
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
P getter Java Basics - Anfänger-Themen 1
M Getter Problematik mit ItemListener Java Basics - Anfänger-Themen 17
S Array und Getter-Methode Java Basics - Anfänger-Themen 2
Avarion Getter von Super-Klasse funktioniert nicht Java Basics - Anfänger-Themen 10
J Variable per Getter holen - wie ? Java Basics - Anfänger-Themen 2
D Getter Mehtode Unsicher Java Basics - Anfänger-Themen 6
M Problem mit getter, liefert nur alte Werte Java Basics - Anfänger-Themen 6
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
M OOP Aufruf vieler Getter Methoden abkürzen? Java Basics - Anfänger-Themen 7
MU5T4NG Getter und Setten bei GUI-Erstellung Java Basics - Anfänger-Themen 13
B Variablen keine Arrayübergabe für getter im Interface Java Basics - Anfänger-Themen 8
J int Wert mit getter holen und in String parsen Java Basics - Anfänger-Themen 5
O Universeller GETTER Java Basics - Anfänger-Themen 5
J Die Getter Methode Java Basics - Anfänger-Themen 6
E [Erledigt] Schöner Code zur Reduktion von unzähligen Getter-Methoden Java Basics - Anfänger-Themen 2
F 2 dimensionales Array getter Methode Java Basics - Anfänger-Themen 3
K Getter Java Basics - Anfänger-Themen 6
S JTextField in anderer Classe mit getter Methode auslesen. Java Basics - Anfänger-Themen 2
M if oder verschiedene getter Java Basics - Anfänger-Themen 31
I If / Else in Setter? Java Basics - Anfänger-Themen 8
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
JavaTalksToMe Kapselung Setter Frage Java Basics - Anfänger-Themen 15
kilopack15 Ist diese setter-Methode richtig? Java Basics - Anfänger-Themen 2
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
F Setter Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben