2012-12-05 5 views
2

자바 구문에 대한 질문이 있습니다. 샘플 프로그램을 찾았습니다.자바 클래스 및 인터페이스에 대한 유형

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(); 
} 

이 프로그램에서는 '반복기'클래스입니까? 클래스 인 경우 다음 문장과 같이 인스턴스를 생성하려면 'new'가 필요합니다.

Iterator it = new Iterator(); 

그렇지 않으면 Iterator 유형이 맞습니까? 인터페이스가 유형으로 사용됩니까? 감사합니다.

+1

[좋은 자원입니다.] (http://docs.oracle.com/javase/tutorial/java/concepts/interface.html) – Whymarrh

+1

모든 인터페이스, 클래스, 열거 형, 주석은 유형이지만 인터페이스는 아닙니다. 따라서 클래스를 ** new ** 연산으로 인스턴스화 할 수는 없습니다 (어쩌면 그 메소드를 익명의 내부 클래스로 정의하는 것만으로). –

답변

1

Iterator는 인터페이스입니다. 클래스가 반복자를 노출하는 가장 일반적인 방법은 다시 인터페이스 인 Iterable을 구현하는 것입니다.

반복기는 컬렉션의 모든 멤버를 단계별로 처리 할 수있는 메커니즘을 제공합니다.

반복기에 대한 설명은 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 연산자를 사용하여 선언 할 수 없습니다. 그러나 그것의 구체적인 구현이 될 수 있습니다.

관련 문제