我正在讀一本關於java中的數據結構的書,它現在正在討論迭代器。我看到下面的代碼,對我來說這似乎很奇怪。在下面的代碼,AbstractIterator
是實現Iterator<E>
一個抽象類,UniqueFilter
是AbstractIterator
一個子類,不是抽象的,並且data
是一個矢量。我想我不明白在第一行中如何獲取Vector.iterator()方法的輸出並將其轉換爲抽象類。在第1行之後,dataIterator
不是抽象類的實例化實例嗎?爲什麼你可以投到一個抽象類
AbstractIterator<String> dataIterator =
(AbstractIterator<String>)data.iterator();
AbstractIterator<String> ui = new UniqueFilter(dataIterator);
我想我還是不明白。如果我們用'UniqueFilter'忽略第二行,第一行會發生什麼?什麼類型的對象是'dataIterator'?它不能是一個'AbstractIterator'對象,因爲這是一個抽象類,但這就是演員所暗示的或者我錯過了什麼? – jhlu87 2011-06-12 02:02:04
@ jhlu87:因爲'UniqueFilter'的每個實例也是'AbstractIterator'的一個實例(通過繼承),所以'UniqueFilter'指派給'AbstractFilter'類型的變量是可以的。抽象類的唯一限制是你不能調用'new AbstractIterator'。你可以愉快地調用'new UniqueFilter',因爲子類是* not * abstract。在這個例子中'dataIterator'指向'UniqueFilter'的一個實例(但在編譯時你不知道)。 – 2011-06-12 02:46:04