2015-09-02 17 views
-2
LinkedList<String> names=new LinkedList<>(); 
ListIterator<String> iterator=names.listIterator(); 

那麼我們就可以進行操作等如何使用的ListIterator <code>iterator.hasnext()</code>,<code>iterator.next()</code>,工作

如果ListIterator是一個接口,我們怎麼能訪問它的引用變量作爲迭代器接口方法應該只有 抽象方法?

names.listIterator()是否返回某個類的對象引用?如果是的話,它返回哪個類對象引用?有人可以澄清這一點嗎?

回答

5

ListIterator是參考號的類型。參考點將是實現接口的類的對象。在Oracle的實現,這個類是嵌套在LinkedList的私有類,稱爲ListItr.

3

如果您在對象上調用names.listIterator(),它返回一個對象,它是類型Iterator的,而是一類是實現Iterator接口。然後你把它稱爲迭代器,因爲Java(像任何好的面向對象的語言)允許多態,這意味着只要你知道所討論的對象實現了接口的方法,就可以將該對象稱爲該界面的類型。

2

請問names.listIterator()是否返回某個類的對象引用?

是。它是。這類型的ListIterator

這裏是一個方法

public ListIterator<E> listIterator(final int index) { 
     rangeCheckForAdd(index); 

     return new ListItr(index); 
    } 

的實施方案,其中ListItr裏面的LinkedList定義的類

private class ListItr extends Itr implements ListIterator<E> { 
+0

爲什麼在ArrayList類的方法,該方法返回的對象實現ListIterator接口的類..它看起來很複雜..爲什麼不能在Arraylist類中定義next(),hasnext(),previous,hasprevious()方法?感謝您能否澄清這一點。 – amar

+0

讓課堂簡單。所有與迭代器相關的邏輯和代碼都轉移到了一個單獨的私有類。 –

+0

嗯謝謝Suresh – amar