Методы интерфейса не выполняют функции, вот и весь смысл интерфейса. Они задают контракт , который должен выполняться классами, которые их реализуют.
Прочитайте документацию для Iterator#hasNext
:
* Returns {@code true} if the iteration has more elements.
* (In other words, returns {@code true} if {@link #next} would
* return an element rather than throwing an exception.)
*
* @return {@code true} if the iteration has more elements
Все, что говорит интерфейс, - что должен делать любой класс, реализующий его . how оставлено на усмотрение реализующего его класса, поэтому механизм выполнения проверки оставлен на усмотрение любого класса, реализующего Iterator.
В вашем примере итератор реализованв
java.util.ArrayList.Itr