# Klassenfremde Laufvariable benutzen?



## Paci (22. Jul 2006)

Hallo!
Hab folgendes Problem:

Ich möchte mehrere Objekte einer Klasse erstellen. Diese Objekte sollen allerdings eine Laufvariable aus einer Verwaltungsklasse zur Nummerierung bekommen. Ich hab jetzt das Problem, dass ich die Laufvariable nicht aus der Verwaltungsklasse rausbekomme...kann mir da jemand helfen?

Den Code hab ich hier gepostet:
http://www.java-forum.org/de/viewtopic.php?p=208417#208417

MfG,

-Paci


----------



## PyroPi (22. Jul 2006)

Hi,

wenn deine Lufnummer ohnehin schon statisch in der Verwaltungsklasse ist, kannst du sie auch in die Konto-Klasse ziehen und dort als statische Variable anlegen. Dann könntest du dir die Verwaltungsklasse nämlich ganz sparen (wenn sie nicht noch für was anderes gebraucht wird). setLaufnummer() würde ich dann als statische Methode in der Konto-Klasse anlegen, falls der Wert der Laufvariablen noch von außen gesetzt werden soll.

Viele Grüße,

PyroPi


----------



## Der_Unwissende (22. Jul 2006)

Hi, 
ich glaube dein eigentliches Problem liegt weniger in der OOP als viel mehr im Verständnis. Wie hier schon gesagt wurde, hat es was mit statischen Methoden/Variablen zu tun. 
Ich gehe an dieser Stelle davon aus, dass du diese nicht komplett verstanden hast. Etwas statisches ist innerhalb der Klasse mit einer "festen" Stelle im Speicher verknüpft. Bei nicht statischen Variablen wird mit für jede Instanz der Klasse ein eigener Speicherbereich reserviert. 
Eine (imho unschöne) Lösung ist es, dass du einfach deine Verwaltung statischer machst. Du kannst dir die statische Methode getLaufnummer anlegen :


```
class VVerwaltung 
{ 
   static int laufnummer = 0; 
   
   public static int getLaufnummer() 
   {       
      VVerwaltung.laufNummer++;

      System.out.println ("Die Laufnummer lautet " + VVerwaltung.laufNummer); 

      return VVerwaltung.laufNummer++; 
   } 

} 
   
class DKonto 
{ 
  ...
   
   public int nummergetter() 
   { 
      return  VVerwaltung.getLaufNummer(); 
   }
}
```

Ok, wie du hier siehst habe ich deine Methode nummerGetter stehen gelassen. Schließlich wollen wir ja abstrakt arbeiten und letztlich kann sich ja die Implementierung auch mal ändern. Statische Variablen und Methoden sind aber (völlig zurecht) immer so eine Sache! 
Du hast gleich zwei Möglichkeiten, das ganze anders zu lösen. Die eine Möglichkeit besteht darin, dass du dir ein Singleton Pattern für die Verwaltung implementierst. Hierbei würdest du immer die gleiche Instanz zurück geben. Diese kann dann die Laufzahl hochzählen. Die Instanz, die zurückgegeben würde, wäre dabei natürlich immer statisch :wink:
Die andere Möglichkeit ist es, dass du dir einen Konstruktor schreibst, der eine Instanz von VVerwaltung entgegen nimmt. 


```
class DKonto 
{    
   int saldo; 
   String inhaber; 
   int kontoNr; 
   int b; 
   int laufNummer;
    
   public DKonto (int saldo, String inhaber, final VVerwaltung verwaltung) //Kontenklasse 
   {
      if (verwaltung != null) {
        this.laufNummer = verwaltung.getLaufnummer();
      }

      ...
   }
```


----------



## Paci (23. Jul 2006)

...mmmh...danke soweit...ich probier mal rum...


----------

