Использование интерфейса Iterator
позволяет любому классу, который реализует свои методы, действовать как итераторы. Понятие интерфейса в Java должно иметь, в некотором смысле, договорное обязательство предоставлять определенные функциональные возможности в классе, который implements
интерфейс, действовать так, как этого требует интерфейс. Поскольку договорные обязательства должны быть выполнены, чтобы быть действительным классом, другие классы, которые видят класс implements
в интерфейсе и, таким образом, успокаиваются, узнав, что класс будет иметь эти определенные функциональные возможности.
В этом примере вместо реализации методов (hasNext(), next(), remove()
) в самом классе LinkedList
класс LinkedList
объявит, что это implements
интерфейс Iterator
, поэтому другие знают, что LinkedList
может быть использован в качестве итератора. В свою очередь, класс LinkedList
будет реализовывать методы из интерфейса Iterator
(например, hasNext()
), поэтому он может функционировать как итератор.
Другими словами, реализация интерфейса является концепцией объектно-ориентированного программирования, позволяющей другим знать, что определенный класс имеет то, что требуется, чтобы быть тем, кем он себя утверждает.
Это понятие обеспечивается применением методов, которые должны быть реализованы классом, реализующим интерфейс. Это гарантирует, что другие классы, которые хотят использовать класс, реализующий интерфейс Iterator
, будут действительно иметь методы, которые должны иметь итераторы, такие как hasNext()
.
Кроме того, следует отметить, что поскольку Java не имеет множественного наследования, использование интерфейса может использоваться для эмуляции этой функции. Реализуя несколько интерфейсов, можно иметь класс, который является подклассом, чтобы наследовать некоторые функции, но также «наследовать» функции другого путем реализации интерфейса. Например, если бы я хотел иметь подкласс класса LinkedList
с именем ReversibleLinkedList
, который мог бы выполнять итерацию в обратном порядке, я мог бы создать интерфейс с именем ReverseIterator
и обеспечить, чтобы он предоставлял метод previous()
. Поскольку LinkedList
уже реализует Iterator
, в новом обратимом списке будут реализованы интерфейсы Iterator
и ReverseIterator
.
Подробнее об интерфейсах вы можете узнать из Что такое интерфейс? из руководства по Java от Sun.