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.