今天遇到了一个问题,以下是程序
import java.util.*;
public class Test{
    public static void main(String[] args){
      Collection c=new ArrayList();
      c.add("hello");
      c.add(new Integer(100));
      System.out.println(c.size());
      System.out.println(c);
    }
}
调试输出的结果是
2
[hello, 100]
第一个输出结果我明白是什么意思,然而第二个输出结果是怎样来的呢?在collection接口中并没有toString()方法,而它的父类object的toSring()方法也不是输出出这一个结果,那么我想问一下这个c是如何转换成字符串的呢,它的内部是怎么样的一个调用过程呢?

解决方案 »

  1.   

    你的Collection是一个ArrayList,而这个toString是调用的AbstractList的方法
      

  2.   

    别忘了多态
    这个时候调用的是 ArrayList
      

  3.   

    樓主好像不知道多態呢。
    自己都知道寫成Collection c=new ArrayList(); 
    應該知道c本質是一個ArrayList,只是它外表是Collection而已
      

  4.   

    可是ArrayList中也没有这个方法呀,请问这是怎么回事呢?
      

  5.   

    是从java.util.AbstractCollection继承下来的
    多看API
      

  6.   

    ArraList重写了toString()方法,把jdk文档好好看看吧
      

  7.   

    arraylist的间接父类:java.util.AbstractCollection重写了toString方法
      

  8.   

    Collection有两个:一个是抽象类,一个是接口,在抽象类中有toString()方法,接口里没有,ArrayList是Collection的子类