在学习Vector类的使用时用到Enumeration接口的两个方法hasMoreElements()和nextElement()来对Vector集合中的对象进行遍历,程序结构大致如下:Vector v = new Vector();  //定义一个结合类对象
以下代码在v中加入对象,省略;Enumeration e = new v.elements();
while(e.hasMoreElements())
{
    Integer intObj = (Integer)e.nextElement();
    以下是对集合类中对象的操作;
}Enumeration是个接口,它的两个方法都没有方法体,上面的代码声明了Enumeration接口的引用变量e,且由new v.elements()返回Enumeration对象,但是Enumeration接口的方法都没有方法体,那为什么还能调用它的两个方法呢?那只有说明e是一个实现了Enumeration接口的对象,可是我查了Vector类的elements()方法,返回的就是Enumeration 对象,这到底是怎么回事呢?

解决方案 »

  1.   

    有点笔误,Enumeration e = new v.elements();这条语句没有new;
      

  2.   

    所有的Collection的实现类里面都实现了Enumeration这个接口,你可以找到Vector的代码看看。另外你好象对于接口的概念不是很熟悉。
      

  3.   

    我在Vector类的代码里面没有发现实现Enumeration接口的两个方法啊!
      

  4.   

    又查了一下接口回调,不就是用接口实现的多态吗,关键是这里的v.elements()方法返回的是一个Enumeration接口类型的引用,并不是一个实现了Enumeration接口的对象引用.
      

  5.   

    返回Enumeration的接口是通过内部类实现的,不明白你是否真的看了源代码。
      

  6.   

    public Enumeration elements()
    286   {
    287     return new Enumeration()
    288     {
    289       private int i = 0;
    290 
    291       public boolean hasMoreElements()
    292       {
    293         return i < elementCount;
    294       }
    295 
    296       public Object nextElement()
    297       {
    298         if (i >= elementCount)
    299           throw new NoSuchElementException();
    300         return elementData[i++];
    301       }
    302     };
    303   }这个就是实现呀。好像叫匿名类吧
      

  7.   

    我也看了,就是看不懂,第一条语句就是return,谁能解释一下