2012-12-05 98 views
2

我有一個關於java語法的問題。 我找到了示例程序。java類和接口的類型

public class Main { 
    public static void main(String[] args) { 
    BookShelf bookShelf = new BookShelf(2); 
    bookShelf.appendBook(new Book("around 80 Days")); 
    bookShelf.appendBook(new Book("trivial solution")); 
    Iterator it = bookShelf.iterator(); 
    } 
} 

這是與以下接口編譯。

public interface Iterator { 
    public abstract boolean hasNext(); 
    public abstract Object next(); 
} 

在這個程序中,是'Iterator'類還是類型? 如果是類,則需要'new'來創建如下句子的實例。

Iterator it = new Iterator(); 

否則,'Iterator'類型?是否將界面用作類型? 謝謝。

+1

[一個很好的資源。](http://docs.oracle.com/javase/tutorial/java/concepts/interface.html) – Whymarrh

+1

每個接口,類,枚舉,註釋都是一個類型,但是一個接口不是一個類,所以它不能用** new **操作實例化(也許只是通過將它的方法定義爲匿名內部類)。 –

回答

1

迭代器是一個接口。一個類暴露一個迭代器最常用的方法是實現Iterable,它也是一個接口。

迭代器爲您提供了一種機制,通過這種機制您可以遍歷集合中的所有成員。

有關Iterator的說明,請參閱http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html

請參閱http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html對於可迭代接口。

迭代器是首次在GOF書中提到的設計模式。 (我相信)

另外請注意,你不能單獨創建一個新的迭代器。它確實需要一個實現來運行。它通常由您的示例中給定的類(BookShelf)給出,因爲該類知道如何通過它的內部結構。

因爲它是一個接口,所以不能使用new運算符聲明。然而它的具體實現可以。