Kapselung getter und setter

topi

Mitglied
Hallo liebe Gemeinde,
ich habe in Klasse1 eine Variable definiert
Java:
public class Klasse1
{
  private int versuche = 0;
  public int getVersuche() { return versuche; }
  public void setVersuche( int versuche )
  {
    // ???
  }
  // ...
}
jetzt möchte ich mit der setter-Methode aus Klasse2 diese Variable ändern.
Java:
public class Klasse2
{
  // ...
  public void Klasse1.setVersuche( int versuche )
  {
    // Änderungswert der Variable
  }
  // ...
}
Was muss ich in diesen beiden Methoden schreiben?
 
Du kannst "setVersuche()" nur auf eine Instanz der "Klasse1" aufrufen!
z.B.
Java:
Klasse1 k1 = new Klasse1(); // erstellt eine Instanz der Klasse1
k1.setVersuche(42); // setzt den Wert von "versuche" der Instanz auf 42

Um diese Methode in einer anderen Klasse aufrufen zu können, musst du dieser eine Referenz auf diese Instanz mitgeben. Das könnte im Konstruktor sein oder auch als Parameter einer Methode:

Java:
class Foo {
   private int value;

   public void setValue(int value) {
      this.value = value;
   }
}

class Bar {
   private int newValue = 42;

   public void setValueInOtherClass(Foo aFoo) {
      aFoo.setValue(newValue);
   }
}

// irgendwo im Code
Foo foo = new Foo();
Bar bar = new Bar();
bar.setValueInOtherClass(foo); // Referenz der Instanz "foo" an "bar" übergeben

In den Setter von Klasse1 schreibst du den Code, um die private Variable "versuche" mit dem Wert des Parameters zu überschreiben.
 
Zuletzt bearbeitet:
hat leider nicht so funktioniert. Aber trotzdem Danke!

Hab's so gemacht:
Java:
public class Klassse1{
       private int versuche;
       public void setVersuche(int anzahl) {versuche = anzahl;}
       //....
}
Java:
public class Klasse2{
   private Klasse1 klass1;
   public Klasse2(){
      klass1 = new Klasse1();
   }
   //....
   klass1.setVersuche(0);
}
und läuft 😀
 
Zuletzt bearbeitet:
Das Prinzip ist genau das, was Dir @temi geschrieben hat und was er Dir geschrieben hat, wird genau so funktionieren 🙂 Schöne Weihnachten.
 
Probier mal bitte
Java:
/**
 */
public class Main {
    public static void main(String[] args) {
        ClazzB cl = new ClazzB(0);
        cl.setB(42);
        System.out.println(cl.getB());
    }
}

class ClazzB {
    private int b;

    public ClazzB(int b) {
        this.setB(b);
    }

    public final int getB() {
        return b;
    }

    public final void setB(int b) {
        if (b >= 0) {
            this.b = b;
        } else {
            throw new IllegalArgumentException("b must be not negative");
        }
    }
}

Wie es @temi hatte funktioniert es natürlich auch wenn man es nicht falsch macht. 🙂
 

Neue Themen


Zurück
Oben