Ebből az AbstractList és AbstractCollection kiesik mint visszatérési típus IMHO, mert ezek az osztályok implementorok/producerek számára szólnak, nem userek/consumerek számára.
Ugyanígy az ArrayList is konkrétum.
Az Iterable, Collection és List között meg van döntési kritérium, hogy melyik legyen: valójában mit modellezünk, mit akarnak csinálni, mit csinálhatnak a consumerek ezzel a típussal:
- List,hogy ha szükség van arra, hogy tetszőleges elemét elérjék indexcímzéssel.
- Collection, hogy ha indexcímzésre nincs szükség/nincs értelme, de attól még módosíthatóságra (add/remove), vagy méretlekérdezésre szükséget kell biztosítani
- Iterable, amikor egy olyan elemhalmazra van szükség, ahol csak egyszerre egy elemmel akarunk műveletet végezni, de magán a gyűjteményen műveletet nem akarunk végrehajtani, csak az elemeire vagyunk kíváncsiak.
Persze ezek egyben jelzik is a hívó félnek, hogy mit kezdhet azzal az adatstruktúrával, amit megkapott. Jó API-t persze tervezni rendkívül nehéz.