为什么methods returns 接口类型的对象?

Why methods returns object of interface type?

我正在尝试了解界面的工作方式。经过一些研究,我发现接口用于指定 class 必须执行的操作。

我在外部 class 中实现了一个方法(first()),它将 Position<E> 实例的 return 元素,但我感到困惑的要点是,first() 使用节点 class 中的方法 getNext(),其中 returns Node<E> 对象,所以为什么我能够 return Position<E> 对象而不是 Node<E> 我什至可以 return Node<E> 来自 first() 方法的对象。

private static class Node<E> implements Position<E> {// Inner Class
    private E element;
    Node<E> previous;
    Node<E> next;

    Node(E element, Node<E> previous, Node<E> next) {
        this.element = element;
        this.previous = previous;
        this.next = next;
    }

    @Override
    public E getElement() throws IllegalStateException {
        if (next == null)
            throw new IllegalStateException("Position no longer valid");
        return element;
    }

    private Node<E> getNext() {
        return next;
    }

}

外部class方法

@Override
public Position<E> first() {
    return header.getNext();
}

由于 Node<E> 实现了 Position<E>Node<E> 的每个实例也是 Position<E> 的实例(或者,准确地说,是 class 实现 Position<E>)。

因此您可以在 return 类型为 Position<E>.

的方法中 return Node<E> 的实例

why I am able to return Position object instead of Node

因为,Node 实现了 Position,这意味着 NodePosition 的一种类型。因此,Position 可以容纳任何实施它的 class 实例。在您的情况下,它是 Node class,指的是 getNext 方法,其中 returns Node 类型对象

private Node<E> getNext() {
    return next;
}