【问题标题】:How do Interface methods perform functions in Java without body definition in it?接口方法如何在没有主体定义的情况下在 Java 中执行功能?
【发布时间】:2020-02-11 23:10:49
【问题描述】:

例如,Iterator 接口中的hasNext()next() 方法通过检查集合中是否存在下一行/对象并分别返回下一个对象来执行其功能,而不覆盖这些方法。

请帮助我理解。

下面的示例代码sn-p:

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

【问题讨论】:

    标签: java object collections interface iterator


    【解决方案1】:

    接口方法执行功能,这就是接口的全部意义所在。它们指定了实现它们的类必须满足的契约

    阅读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
    

    接口所说的只是实现它的任何类必须做的事情如何留给实现它的类,所以检查的机制留给任何实现 Iterator 的类。

    在您的示例中,迭代器在

    中实现

    java.util.ArrayList.Itr

    【讨论】:

    • 是的,我同意了。但试图了解更多一点,我可以看到上面的方法返回的值没有写在里面的“return”语句。
    • @AsikRahman.M 我不明白。你指的是哪些方法?
    • 对不起,我现在明白了,所以正如你提到的,java.util.ArrayList.Itr 类实现了hasNext()next() 方法对吧?
    • 是的。 Iterator 本身只是定义了方法签名(输入参数的类型和输出类型)。
    • 好的,谢谢@Ben R
    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2013-03-17
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多