Di solito, usi semplicemente l'API JDK esistente. Perché? Lascia che ti dia un feedback sul tuo codice:
public class School extends ArrayList<StudentList> {
}
o, in altre parole: una scuola IS-Un elenco di liste di studenti (elenco di gruppi / classi?). Che cos'è veramente una scuola?
Una scuola è un'istituzione. Puoi trovare studenti all'interno (HAS-A), stanze, proffesors e altro ancora. Ovviamente, se vuoi riprogettare il codice di cui sopra, finirai per scrivere:
public class School {
private List<Student> students; // or list of list? your choice
}
Inoltre, se si osservano i metodi pubblici, si avrà un metodo addAll, con Collection<StudentList>
come argomento. Una scuola IS-Un elenco di StudentList (la tua implementazione), così puoi farlo:
School s1 = ...;
School s2 = ...;
s1.addAll(s2);
Trovate il codice sopra logico? Semplicemente non riesco a immaginare una scuola che aggiunge un'altra scuola :) Il metodo addStudents sembra più appropriato, come questo:
s1.addStudents(s2.getStudents());
Questa linea parla da sola: gli studenti andranno in un'altra scuola il prossimo anno:)
Dovresti estendere / implementare le classi / interfacce attuali solo quando ritieni che non sia adatto a te. Immagina una lista circolare, l'iteratore dovrebbe spostarsi sul primo elemento alla fine dell'elenco. Non conosco alcuna implementazione di elenchi circolari nell'API JDK, sono costretto a implementare la mia, non ho altra scelta. Hai.