我正在读一本关于Java数据结构的书,现在正在谈论迭代器。我看到了以下代码,这对我来说似乎很奇怪。在以下代码中,AbstractIterator
是实现Iterator<E>
的抽象类,UniqueFilter
是AbstractIterator
的子类,该子类不是抽象的,而data
是Vector。我想我不明白在第一行中如何获取Vector.iterator()方法的输出并将其转换为抽象类。在第1行之后,dataIterator
是否不是抽象类的实例化实例?
AbstractIterator<String> dataIterator =
(AbstractIterator<String>)data.iterator();
AbstractIterator<String> ui = new UniqueFilter(dataIterator);
最佳答案
问题在于我们正在谈论两种不同的类型。对象的(运行时)类型和引用的(编译时)类型。
dataIterator
是抽象类型的引用-可以。 data.iterator()
返回对对象的引用,该对象的类型在示例中不清楚,但显然是从AbstractIterator<String>
继承的具体类型-okt 因此,在第一行之后,
dataIterator
仍然是AbstractIterator<String>
类型的引用,但这是对实现AbstractIterator<String>
的具体类型的对象的引用。请记住,在JAVA中,所有对象变量实际上都是引用。
UniqueFilter
与这个问题无关,顺便说一句。