Java 如果;迭代器;是一个接口,如何才能创建;迭代器;?

Java 如果;迭代器;是一个接口,如何才能创建;迭代器;?,java,collections,iterator,Java,Collections,Iterator,所以仅仅几天我就接触了集合类,偶然发现了一个叫做“迭代器”的东西。经过几次窥探和戳戳之后,我再次偶然发现docs.oracle.org,在那里我了解到迭代器实际上是一个接口,我们仍然创建它的对象 Iterator itr=mypreciouse.Iterator() “itr”不是一个对象吗??还是我遗漏了什么??难道不可能使对象成为一个接口吗 那个特别的东西是什么 mypreciouse.iterator() 不是吗 newiterator()实例化一个对象 编辑:忘了提到Javas是我的第一

所以仅仅几天我就接触了集合类,偶然发现了一个叫做“迭代器”的东西。经过几次窥探和戳戳之后,我再次偶然发现docs.oracle.org,在那里我了解到迭代器实际上是一个接口,我们仍然创建它的对象

Iterator itr=mypreciouse.Iterator()

“itr”不是一个对象吗??还是我遗漏了什么??难道不可能使对象成为一个接口吗

那个特别的东西是什么

mypreciouse.iterator()

不是吗

newiterator()实例化一个对象

编辑:忘了提到Javas是我的第一种编程语言,所以请原谅我的愚蠢

“itr”不是一个对象吗

这是推荐信

难道不可能使对象成为一个接口吗

不能实例化接口。这里,父类型(
迭代器
)引用引用子类型的对象

那个特别的东西是什么

mypreciouse.iterator()

这里,
iterator
是类中的一个函数,其对象是
mypreciouse
。查看函数的定义,
iterator
以获取示例

不是吗

newiterator()实例化一个对象

可以使用关键字
new
实例化非抽象类。您可以通过在接口名称上使用
new
实例化匿名类,如示例所示

“itr”不是一个对象吗

这是推荐信

难道不可能使对象成为一个接口吗

不能实例化接口。这里,父类型(
迭代器
)引用引用子类型的对象

那个特别的东西是什么

mypreciouse.iterator()

这里,
iterator
是类中的一个函数,其对象是
mypreciouse
。查看函数的定义,
iterator
以获取示例

不是吗

newiterator()实例化一个对象


可以使用关键字
new
实例化非抽象类。您可以通过在接口名称上使用
new
实例化匿名类,如示例所示。

接口的要点是:

  • 您不能直接创建接口的实例、对象,您是正确的
  • 类可以实现接口。它声明它实现了接口,并且它包含接口包含的所有方法(除非它是抽象类,但是您不能从中创建对象,所以现在让我们先忘掉这种情况)
  • 您可以将对实例(对象)的引用指定给声明为具有接口类型的变量(或参数)
  • 因此,要回答您的问题:

    “itr”不是一个对象吗

    myPrecious.iterator()
    返回一个真实对象,对该对象的引用存储在
    itr
    中。该对象可能属于某个我们从未听说过且不需要关心的类。我们只知道该类实现了
    迭代器
    接口。这意味着我们可以使用该接口指定的迭代器

    不是吗

    newiterator()实例化一个对象

    好问题。答:最后是这样。然而,在现实编程中,我们经常调用一个普通的方法来获得一个新的对象。该方法必须依次使用
    new
    。或者调用另一个使用
    new
    (等)的方法。这就是事情进展顺利的原因:因为我们不知道对象的实际类,所以我们不能自己使用
    new
    。但是,您的集合对象
    myPrecious
    确实知道用于实例化迭代器对象的类,因此它可以为我们使用
    new
    。并将创建的迭代器对象返回给我们

    检查的一种方法是通过这个小代码实验:

        List<String> myList = new ArrayList<>();
        Iterator itr = myList.iterator();
        System.out.println(itr.getClass());
    
    List myList=new ArrayList();
    迭代器itr=myList.Iterator();
    System.out.println(itr.getClass());
    
    在我的Java 11上,它打印:

    类java.util.ArrayList$Itr


    其他java版本上的输出可能不同。您注意到,输出中没有提到作为迭代器对象类的
    Iterator
    接口,而是提到了一些
    ArrayList$Itr
    。这意味着在
    ArrayList
    类中声明了一个名为
    Itr
    的类。因此,是的,迭代器实际上是属于类的对象。

    接口的要点是:

  • 您不能直接创建接口的实例、对象,您是正确的
  • 类可以实现接口。它声明它实现了接口,并且它包含接口包含的所有方法(除非它是抽象类,但是您不能从中创建对象,所以现在让我们先忘掉这种情况)
  • 您可以将对实例(对象)的引用指定给声明为具有接口类型的变量(或参数)
  • 因此,要回答您的问题:

    “itr”不是一个对象吗

    myPrecious.iterator()
    返回一个真实对象,对该对象的引用存储在
    itr
    中。该对象可能属于某个我们从未听说过且不需要关心的类。我们只知道该类实现了
    迭代器
    接口。这意味着我们可以使用该接口指定的迭代器

    不是吗

    newiterator()实例化一个对象

    好问题。答:最后是这样。然而,在现实编程中,我们经常调用一个普通的方法来获得一个新的对象。那种方法
        List<String> myList = new ArrayList<>();
        Iterator itr = myList.iterator();
        System.out.println(itr.getClass());