Как методы интерфейса выполняют функции в Java без определения тела в нем? - PullRequest
0 голосов
/ 15 октября 2019

Например, методы hasNext() и next() в интерфейсе Iterator выполняют свои функции, проверяя наличие следующей строки / объекта в коллекции и возвращая следующий объект соответственно, без переопределения методов.

Пожалуйста, помогите мне понять.

Пример кода ниже:

import java.io.*;
import java.util.*;

class Test {
    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<String>(); 

        list.add("A"); 
        list.add("B"); 
        list.add("C"); 
        list.add("D"); 
        list.add("E"); 

        // Iterator to traverse the list 
        Iterator iterator = list.iterator(); 

        System.out.println("List elements : "); 

        while (iterator.hasNext()) 
            System.out.print(iterator.next() + " "); 

        System.out.println(); 
    } 
}

1 Ответ

2 голосов
/ 15 октября 2019

Методы интерфейса не выполняют функции, вот и весь смысл интерфейса. Они задают контракт , который должен выполняться классами, которые их реализуют.

Прочитайте документацию для 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...