This is a classic example of an interface vs a concrete class. Usually object types ending in 'able' (Iterable, Comparable, etc...) are objects that implement some interface which guarantees a certain collection of methods will be available. An Iterator itself is a concrete object which is use for the iterations. As JosAH said, a class which implements Iterable is guaranteed to ...