package com.shengsiyuan2;import java.util.HashSet;
import java.util.Iterator;public class InteratorTest
{
public static void main(String[] args)
{
HashSet set = new HashSet();

set.add("a");
set.add("b");
set.add("c");
set.add("d");
set.add("e");

                  Iterator iter = set.iterator();

while(iter.hasNext()) {
String value = (String)iter.next();
System.out.println(value);
}

}
}为了使HashSet 能够提取元素 这里使用了迭代器
这里有个疑问 
Iterator iter = set.iterator();
这里是多态 
iterator() 方法 返回一个 Iterator<E> 这里有个疑问 接口类型的引用可以指向实现该接口的类的对象API中
在java.util 
接口 Iterator<E>
所有已知实现类: 
BeanContextSupport.BCSIterator, EventReaderDelegate, Scanner Hashset 没有实现这个接口啊 为什么 Iterator iter的引用 可以指向 set.iterator()
另外 加入 有 接口 A  B   
B接口继承A 那么 如果有一个类C C实现了 B 接口 那么需要实现A接口中定义的抽象方法么? 求解答 谢谢 

解决方案 »

  1.   

    因为HashSet实现了Iterable接口
    iterator()方法是Iterable接口定义的
      

  2.   

    方法hasNext()、next()才是Iterator接口定义的,所以HashSet不能直接调用这两个方法。
      

  3.   

    昂 我看错了 这里是不是 不是多态啊 Iterator iter = set.iterator();  右面的不是对象吧
    set.iterator 返回的是一个什么东西呢?
      

  4.   

    有接口A B
    B接口继承A 那么 如果有一个类C C实现了 B 接口 那么需要实现A接口中定义的抽象方法么? 求解答  A都abstract的就不要,不是的话就全要。
    另外util包下面的集合类基本都是实现iterable接口的
      

  5.   

    HashSet.iterator()返回的是一个指向Iterator实例的引用,它不是指向HashSet
    所以这跟HashSet是否实现了Iterator接口无关
    任何一个类都可以提供一个方法返回某个Iterator实例,无需实现任何接口。这跟你在某个类中提供一个返回String类型的方法是一样的。
    具体返回的是怎样一个实例取决于各个类自己怎么实现,HashSet.iterator()的实现是由JDK完成的,有兴趣可以去看源码。