接口是不能被实例化的,接口中的方法都是没有方法体的抽象方法。 
那么请问: 
List list=new Arraylist(); 
list.add("aaa"); 
list.add("bbb"); 
Iterator it=list.iterator(); 
while(it.hasNext()) 

System.out.println(it.next()); 

Iterator是一个接口,为什么它可以被实例化?就是Iterator it=list.iterator();这句,list.iterator()方法返回了一个Iterator的对象。接口中的方法都是没有方法体的抽象方法。为什么可以直接用it.hasNext(),it.next()),这些没有方法体的方法。没有方法体的方法应该什么都没实现啊?

解决方案 »

  1.   

    Iterator it=list.iterator();
    Iterator是一个接口,它是不能事例化的,
    但是它能引用實現它對象的對象,你自己去解讀下JDK源碼里面有的
      

  2.   

    list.iterator(); 
    返回的实例对象,实现了Iterator接口
    Iterator it=list.iterator(); 
    it是个引用,it.hasNext(),实际调用的是list.iterator()返回的实例对象的hasNext()方法
      

  3.   

    回LS的 多态我清楚,比如
    List list=new ArrayList()就是一个多态的例子。
    List是ArrayList的父类,List的引用可以指向ArrayList的对象。
    List的 引用list可以调用被ArrayList覆盖的方法。
    可是Iterator it=list.iterator();是多态的话,
    那么只能说list.iterator()产生了一个实现Iterator接口的类的对象。
    那么这个类是什么那?谁能告诉我?
      

  4.   

    回楼上的,这个对象是
     java.util.AbstractList$Itr
    楼上的,你相信么?
      

  5.   

    用这个方式试试
    List list=new ArrayList(); 
    System.out.println(list.iterator().getClass().getName());
      

  6.   

    谢谢jingtao8177 我回去试试``
      

  7.   

    API文档里有java.util.AbstractList$Itr
    这个类么?