Diciamo che ho due classi, Foo
e ExtendedFoo
dove ExtendedFoo
eredita da Foo
. Foo
ha un metodo .getValue()
che restituisce un numero, ExtendedFoo
ha anche .increaseValue()
che si aggiunge al valore memorizzato (Ovviamente, in questo esempio, ciò che fanno è completamente arbitrario). Quello che potrei voler fare è tenere traccia di diversi oggetti di ogni classe, e per tutti gli oggetti ExtendedFoo
, eseguire .increaseValue()
e quindi stampare cosa viene restituito da .getValue()
da ogni oggetto.
Il modo in cui lo farei sarebbe qualcosa di simile al seguente:
private ArrayList<Foo> foos;
private ArrayList<ExtendedFoo> eFoos;
public static void main(String [] args) {
foos = new ArrayList<Foo>();
eFoos = new ArrayList<ExtendedFoo>();
// ...
}
public void addFoo(Foo f) {
foos.add(f);
}
public void addExtendedFoo(ExtendedFoo f) {
eFoos.add(f);
foos.add(f);
}
public void updateAndPrint() {
for(ExtendedFoo ef : eFoos) {
ef.increaseValue();
}
for(Foo f: foos) {
System.out.println(f.getValue());
}
}
Ovviamente, i problemi ovvi con questo sono che il programmatore potrebbe finire per chiamare accidentalmente addFoo()
e addExtendedFoo()
senza rendersi conto del vero scopo. Se non dovessi includere la chiamata di foos.add(f)
a addExtendedFoo()
, allora potrebbe passare dall'altra parte.
In che modo vorresti che ciò avvenga nel modo più sicuro possibile?