Attribut eines Oberobjekts für mehrere Subobjekte

lambda

Erfahrenes Mitglied
Hi zusammen,

ich würde gerne folgendes machen:

1 Oberklasse vererbt an 1 Subklasse.

Wenn ich jetzt mehrere Objekte der Subklasse erzeuge und eine bestimmte Operation bei einem der Objekte durchgeführt wird, soll ein Attribut geändert werden, was dann für alle anderen Objekte der Subklasse übernommen wird.

Wie krieg ich das hin? :-(

Vielen Dank vorab!
 
Hallo,

dazu musst du nur das entsprechende Attribut als protected static definieren.
protected damit es in der Subklasse bekannt ist, static damit es für alle Instanzen der Klasse den selben Wert hat.

gruß
sDroid
 
Zuletzt bearbeitet:
Original geschrieben von sDroid
Hallo,

dazu musst du nur das entsprechende Attribut als protected static definieren.
protected damit es in der Subklasse bekannt ist, static damit es für alle Instanzen der Klasse den selben Wert hat.

gruß
sDroid

Er meint etwas anderes. Er will während der Laufzeit dafür sorgen das alle Subklassen informiert werden wenn an der Oberklasse was verändert wird.

Das funktioniert so nicht, du musst deine Subklassen in einer Collection speichern und diese durchlaufen.

Du kannst dies automatisch machen indem du 1 Statische Methode und ein Statischen Member nutzt

Code:
class MySub extends MyBase {
   
  private ArrayList instances;
   
  public static  MySub getInstance() {
     MySub sub = new MySub();
     instances.add(sub);
     return sub;
  }     

  public static void tutMalAlleWas() {
     Iterator itter = instances.iterator();
     while(itter.hasNext()) { 
         ((MySub)itter.next()).meinMethode();
     }
   }
}

Damit erstellst du deine Objecte niemals mit dem Constructor
sondern über die Methode getInstance(), die legt gleichzeitig
eine Referenz in einer ArrayListe an so das du mit der statischen
Methode alle Objecte dieser Klasse durchlaufen kannst und
ihre methode aufrufst.

Anwendung dann wie folgt:

Code:
  ....
  MySub mysub = MySub.getInstance();
  MySub mysub2 = MySub.getInstance();
  MySub.tutMalAlleWas();

Wenn du das aber auch für verschiedene Subklasssen der Oberklasse
haben willst so musst du z.b das Factory Patting anwenden.
Sprich eine Fabrik die dir verschiedene Instancen liefert.

Code:
    class SubClassFactory {
        private static ArrayList instances;
        
        public static BaseClass getInstance(Class class) {
           BaseClass returnvalue;
           if(class==FirstSub.class)  
                   returnvalue = new FirstClass();
           else if (class==SecondClass.class) 
                   returnvalue = new SecondClass();
            instances.add(returnvalue);
            return returnvalue;
        }
 
      public static void tutMalAlleWas() {
        Iterator itter = instances.iterator();
         while(itter.hasNext()) { 
            ((MySub)itter.next()).meinMethode();
         }
      }
          
 }

Wenn du das nicht sofort verstehst, nicht verzagen das geht schon in die
fortgeschrittene Programmierung.
 

Neue Beiträge

Zurück