import java.util.*;public class Test {
  public static void main(String[] args) {
    Collection c = new HashSet();
    c.add(new Name("f1","f2"))//name类的建立略了
     ..............................
    Interator i = c.iterator();
    while(i.hasNext()) {
      Name n = (Name)i.next();
      System.out.print(n.getFirstName()+" ")
    }
  }
}
问题是c是父类引用指向子类对象,那HasSet特有的属性不就用不了了吗,那直接就建立Collection类不就完了吗?
第二个是i拿到HasSet提供的遍历c的一个对象吗?

解决方案 »

  1.   

    谢谢各位,我刚学java可能问的有点幼稚
      

  2.   

    collection 是接口怎么实例化?
      

  3.   

    i拿到HasSet提供的遍历c的一个对象吗?是的,可以去了解一下迭代子模式 
      

  4.   

    collection是接口,它不能实例化,必须用其子类来实现,
    所以是 Collection c = new HashSet();//HashSet是Collection接口的一个实现
    此时的c是一个实现了Collection接口的HashSet,它只能有Collection接口定义的方法和属性,
    如果你这样:Object o = new HashSet();
    那么o只有Object类中的方法。
      

  5.   

    将接口的引用指向其实现类的对象,这是Java中基于接口的多态的方式,建议楼主看看多态的内容;
    Interator是迭代器,本身就是为了方便遍历集合类中的元素而生的。
      

  6.   

    谢谢大家,Collection c = new HashSet(); 的意思是建立一个HashSet对象,但是只能看到Collection中提供的方法,是这样吗?
      

  7.   

    你把hashset();向上转型了   窄化了hashset();  只能使用 继承自collection 中的方法了