# Variable dem Konstruktor einer Klasse übergeben



## CroweHammer (23. Okt 2008)

Sers Leute,
_ich hab mal wieder eine simple Anfängerfrage!_

Ich hab zwei Klasse in einem Package. 
Eine Klasse ist nur für die Berechnung meiner Aufgaben zuständig.
In meiner Basisklasse hab ich zwei private Variablen die ich ebenfalls für die Berechnungsklasse benötige.

*Das Problem:*

Diese zwei Variablen würde ich gerne in der Basisklasse private lassen und in dem Konstruktor der Berechnungsklasse für diese Klasse ebenfalls nutzbar machen. Wie geht das?

mfg CroweHammer


----------



## MiDniGG (23. Okt 2008)

Naja. Am einfachsten geht das wohl mit getter und setter.

*Edit 1und 2:*
Oder du übergibst das einfach als Parameter an die Berechnungsklasse.

Also:


```
public class Berechnungsklasse {
    public Berechnungsklasse(int variable1, int variable2) {
        ...
    }
}
```

und


```
public class Basis {
    public Basis() {
        new Berechnungklasse(12, 24);
    }
}
```


----------



## maki (23. Okt 2008)

Oder als Konstruktor Parameter... dann kann man sich die Getter/Setter sparen.


----------



## MiDniGG (23. Okt 2008)

Jap. Genau. Hab ich jetzt nicht so schnell schreiben können


----------



## maki (23. Okt 2008)

Ein Konstruktor gibt kein void zurück


----------



## MiDniGG (23. Okt 2008)

ups... Mein Fehler.........     

Habs geändert. ^^


----------



## ARadauer (23. Okt 2008)

schau dir das mal an, vielleicht hilt dir das.

achtung!!! einfach die int werte übergeben funktioniert nicht, da bei primitiven datentypen der wert kopiert wird (call by value)
bei einem objekt ist es zwar auch call by value (und nicht call by referenz, wie viele immer annnehmen) aber es werden nicht die werte kopiert, sondern die referenz auf das objekt.

das heißt
1. wenn ich das objekt in main verändere, greift der rechner auf die gänderten werte zu
2. wenn ich im rechner die komplette referenz überschreibe (c = new Container()) habe ich zwei verschiedene objekte)... is ein bissal kompliziert ;-) ausprobieren dann wirds klarer...


```
public abstract class Test2  {

	public static void main(String[] args) {
	   Container c = new Container();
	   c.setWert1(1);
	   c.setWert2(2);
	   
	   Berechnung rechner = new Berechnung(c);
	   rechner.addiere();
	   c.setWert1(88);
	   rechner.addiere();  
	   
	}

		
} 

class Container{
   int wert1;
   int wert2;
   
   public int getWert1() {
      return wert1;
   }
   public void setWert1(int wert1) {
      this.wert1 = wert1;
   }
   public int getWert2() {
      return wert2;
   }
   public void setWert2(int wert2) {
      this.wert2 = wert2;
   }  
   
}

class Berechnung{
   Container c;
   
   public Berechnung(Container c) {
      this.c = c;
   }
   
   public void addiere(){
      System.out.println("..."+(c.getWert1()+c.getWert2()));
   }
}
```


----------



## MiDniGG (23. Okt 2008)

Naja. So wie ich das verstanden hab möchte CroweHammer diese veriablen ja nur verwenden und nicht verändern. Somit reicht es ja diese mit call-by-value zu übergeben.

Oder versteh ich da gerade etwas falsch?

Gruß


----------



## CroweHammer (23. Okt 2008)

Danke Leute ich habs hingekriegt!

Grob gesagt mittels einfacher Konstruktor Parameterübergabe. Eure Antworten haben mir weitergeholfen, thx! Mit der getter wäre das natürlich auch gegangen, brauch ich aber für meinen Zweck nicht 

 :applaus: for the community

mfg crowehammer


----------

