package bag;
2    import java.util.ArrayList;
3    public class text {
4    public static void main(String[] args) {
 5   ArrayList list = new ArrayList();
 6    Circle o = new Circle(1);
  7    Object p = new Circle(2);
 8    list.add(o);
 9    list.add(p);
10   System.out.println(o.getArea()); 
11  System.out.println(((text1)p).getArea());
 12    System.out.println(((text1) list.get(0)).getArea());
13    System.out.println(((text1) list.get(1)).getArea());
 }
}
第10行和第11行都能懂,能明白为什么要进行转换
但是为什么第12行和第13行都要进行强制转换呢?list.get(0)得到的不就是o吗??不就相当于o.getArea()了嘛??Java对象ArrayList

解决方案 »

  1.   

    那是因为你的list没有使用泛型,没有明确指定类型。
    所以list.get的返回类型默认都是Object型的。
      

  2.   

    因为你将Circle和object两种对象放进list里面,而你又没用泛型定义list的类型,所以java默认list里所有的对象都是object类型,Circle在add进list的时候被向上转成object了.java中的集合只能放同一种类型的数据,这个你应该知道吧
      

  3.   

    本身创建对象的时候就不是object类型的啊~~而且调用list.get的返回类型默认是Object型的.现在想想取值~必然得强转一下~
      

  4.   

    public E get(int index)返回此列表中指定位置上的元素。  返回值是E 这个E就是ArrayList对象所指定的类型  楼主创建对象的时候ArrayList list = new ArrayList(); 未指定类型 所以要强转
      

  5.   

    在不用泛型的情况下,get得到的都是Object对象
      

  6.   

    程序不知道list里放的是什么类型,主要得开list定义的类型是什么,如果不是定义的类型,就有可能要使用强转了,但不是所有类型都能强转哦。
      

  7.   

    java1.5之前没有泛型这玩意的时候, ArrayList里的元素只有一种类型就是Object。所以当你不用泛型的时候,从ArrayList拿出来的对象都是Object类型的。所以必须强转,才能使用此对象的方法。
      

  8.   

    因为没有使用泛型,get(int index)返回的类型都是object,因此要进行强转。
      

  9.   

    list没用泛型,得到的引用是Object类型的....
      

  10.   

    可以查看jdk帮助文档,像这个问题你可以看看帮助文档中的返回值类型及一些介绍,慢慢的你就自己能理解了