【问题标题】:Why methods returns object of interface type?为什么方法返回接口类型的对象?
【发布时间】:2018-02-04 09:22:33
【问题描述】:

我正在尝试了解界面的工作方式。经过一番研究,我发现接口是用来指定一个类必须做什么的。

我在外部类中实现了一个方法(first()),它将返回 Position<E> 实例的元素,但我感到困惑的主要一点是,first() 使用了来自 Node 类的方法 getNext(),它返回 @ 987654325@ 对象,那么为什么我能够返回Position<E> 对象而不是Node<E>,我什至可以从first() 方法返回Node<E> 对象。

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;
    }

}

外部类方法

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

【问题讨论】:

    标签: java interface inner-classes


    【解决方案1】:

    由于Node&lt;E&gt; 实现了Position&lt;E&gt;Node&lt;E&gt; 的每个实例也是Position&lt;E&gt; 的一个实例(或者,准确地说,是实现Position&lt;E&gt; 的类的一个实例)。

    因此,您可以在返回类型为Position&lt;E&gt; 的方法中返回Node&lt;E&gt; 的实例。

    【讨论】:

      【解决方案2】:

      为什么我能够返回 Position 对象而不是 Node

      因为Node 实现了Position,这意味着NodePosition 的一种类型。所以,Position 可以保存任何实现它的类实例。在您的情况下,它是Node 类,指的是getNext 方法,它返回Node 类型对象

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

      【讨论】:

        猜你喜欢
        • 2012-03-02
        • 1970-01-01
        • 2011-05-16
        • 2021-09-29
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多