日期:2014-05-20  浏览次数:20586 次

高手帮忙解释下一个很短的程序

import   java.util.*;  
public   class   CountingIntegerList   extends   AbstractList <Integer>   {  
private   int   size;  
public   CountingIntegerList(int   size)   {  
this.size   =   size   <   0   ?   0   :size;  
}  
public   Integer   get(int   index)   {  
return   Integer.valueOf(index);  
}  
public   int   size()   {   return   size   ;   }  
public   static   void   main(String[]   args)   {  
System.out.println(new   CountingIntegerList(30));  
}  
}  


这个的输出结果怎么是:  
[0,1,~~~一直到29]  

我搞不懂的是:  
new   CountingIntegerList(30)这个语句不是只改了size的值,而没有对元素赋值吗?  
为什么..输出结果里面有元素值??  


------解决方案--------------------
出现这种情况的原因是下边这两段代码,覆盖了父类的方法
public Integer get(int index) {
return Integer.valueOf(index);
}
public int size() { return size ; }

println的时候对List进行toString(),toString()内部使用Iterator迭代,而Iterator内部又使用size()来判断有多少个元素,所以会返回30个数值。同时toString()会调用get(int index)来获取元素。。。

所以实际上只是显示了index