2012-12-05 57 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运算符声明。然而它的具体实现可以。