- extends e implements sono diversi: una classe può estendere un'altra classe, un'interfaccia può estendere un'altra interfaccia, ma una classe non può estendere un'interfaccia
- Iterable e Iterator NON sono la stessa cosa 🙂
Iterable è un'interfaccia.
Iterable richiede di implementare un metodo che restituisce un Iterator e si chiama iterator<Tipo>(). Il metodo può anche solo restituire un oggetto che implementa un Iterator.
L'oggetto Iterator può essere anche una classe innestata creata ad hoc, che implementa boolean HasNext() e Tipo Next(). - se devo dichiarare una proprietà valida per tutta l'interfaccia devo anche inizializzarla dentro l'interfaccia.
- se implemento un oggetto generics, i metodi che nell'interfaccia prendono T devono prendere un parametro Object, non T, a meno che T non estenda qualche altro tipo.