当listIterator作为引用类型时,赋值给它的对象必须实现吗?

When listIterator is used as a reference type, the object assigned to it must implement it?

对于类型为接口的引用变量,您分配给它的对象必须实现该接口。 这对于被分配一个对象的列表迭代器接口如何表示是正确的 class 没有实现它。(我在层次结构中找不到关系)

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

ListIterator<Type> it = list.listIterator(list.size());---1

我读到 Iterator 是 ListIterator 的超级class,但我找不到 ListIterator 和 ArrayList 或 List 之间的关系。

使用 List 接口,我知道它有一个方法 listIterator() 可以帮助将迭代器分配给集合。但是 class 实际上实现了 ListIterator 以便在层次结构中分配给它。

我正在尝试理解语句 1 以及它是如何分配这个值的。

按照immibis评论的建议,我们看一下listIterator(int)的实现:

public ListIterator<E> listIterator(int index) {
    if (index < 0 || index > size)
        throw new IndexOutOfBoundsException("Index: "+index);
    return new ListItr(index);
}

我们看到,return 类型是 ListIterator<E>,这正是我们所期望的(因为 ArrayList class 定义是 public class ArrayList<E>)。例如,如果我们有一个 ArrayList<String>,方法 return 类型将是 ListIterator<String>.

但是这是什么?它不是我们创建的 ListIterator,而是 ListItr 的一个实例。让我们看看它的定义:

private class ListItr extends Itr implements ListIterator<E>

它是 ArrayList 的内部 class,它定义了一些实现 ListIterator 接口的 class。

因此,查看您的代码,我们可以添加一些括号以更清楚地说明发生了什么:

ListIterator<Type> it = (list.listIterator(list.size()));

我们所做的是获取我们的列表,然后在该列表上调用 listIterator(),将 list.size() 作为参数传递。然后方法 return 是一个 ListIterator,它被赋值给 it.

编辑:

我不太确定我之前是否理解你的问题。在这种情况下,必须实现 ListIterator 接口的不是 ArrayList,而是通过您在实例 上调用的 listIterator(int) 方法 return 编辑的对象 ArrayList 的,因此只有通过该方法调用的对象 return 必须实现该接口。