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