Per spiegare cosa intendo, darò un esempio di un caso cattivo per un sovraccarico di sottotipo.
Diciamo che abbiamo una comunità di persone. E a seconda del tipo di persone nella nostra comunità, la nostra comunità ha alcune statistiche:
(in java):
public class Person {...}
public class PoliceMan extends Person {...}
public class Community {
private List<Person> people;
private int crimeFightingIndex;
...
public void add(Person p) {
people.add(p);
}
public void add(PoliceMan p) {
crimeFightingIndex++;
people.add(p);
}
}
Perché è così male?:
Interrompe l'incapsulamento per il campo crimeFightingIndex
, poiché è compito del chiamante passare un PoliceMan
con entrambi i tipi di runtime. Modifica di crimeFightingIndex
, come previsto o non:
Person p = new PoliceMan();
community.add(p); // calls the unintended method.
PoliceMan pm = new PoliceMan();
community.add(pm); // calls the intended method.
Domanda:
Quindi, se ce ne sono, quali sono i casi "buoni" che usano questo tipo di sovraccarico con un sottotipo. vale a dire dove un sovraccarico prende gli stessi argomenti ma dove uno o più di essi è un sottotipo dell'originale.