你是把a0,a1的地址加到alist中了,因此打印出来的是它们的地址。

解决方案 »

  1.   

    public class AListTest {
        public static void main(String[] args) throws Exception {
    AList alist = new AList();
    A a0 = new A(0);
    Object a1 = new A(1);
    alist.add(a0);
    alist.add(a1);
    System.out.println(alist);
    System.out.println(alist.get(1));
    System.out.println(alist.size());
    System.out.println(a0.toString());
    System.out.println(a1.toString());
    System.out.println(a1.getClass().getName());
    System.out.println(a1.getClass().toString());           
        }
    }
      

  2.   

    class A {
        private int number;
        
        A(int i) {
    number = i;
        }
        public void toString() {
            System.out.println(number); 
        }
    }
    你在A类里面加上toString()方法,估计能得到你所要打印的值。
      

  3.   

    我上面说错了你在class A里面加上
        public int getNumber() {
          return number;
        }
    然后(A)alist.get(1).getNumber();
    就能取到你想要的值了。
    你上面alist.get(1)得到的只是一个object。并没有从这个object里面取出东西来。
      

  4.   

    如果两个object加到了alist里,为什么要调用super.get(index)来取出,alist的父对象在这里起什么作用另外,下面这个程序要把this改为super.toString(),否则死循环,也是同样的问题,能否详细告知父对象(这里是Object)起什么作用,应该如何使用这种作用
    import java.util.*;
    public class A {
        public String toString() {
    return "address" + this;
        }    public static void main(String[] args) {
    ArrayList v = new ArrayList();
    for (int i = 0; i < 10; i++) {
        v.add(new A());
            }
    System.out.println(v);
        }
    }
      

  5.   

    这就是OOD中的Class Factory思想。ArrayList只对Object操作,Object是所有class的超类,所有的class都是Object的子类,所以,ArrayList可以操作所有的class(这时你的A的实例就upcast为一个Object)。当然,你取出来还要再downcast为A。改一下你的程序:
    import java.util.*;
    class A {
        private int number;    A(int i) {
    number = i;
        }    public int getNum()
        {
           return number;
        }
    }
    class AList extends ArrayList {
        public void add(A a) {
            super.add(a);
        }    public Object get(int index) {
            return super.get(index);
        }    public int size() {
    return super.size();
        }
    }
    public class AListTest {
        public static void main(String[] args) {
    AList alist = new AList();
    A a0 = new A(0);
    Object a1 = new A(1);
    alist.add(a0);
    alist.add(a1);
    System.out.println(((A)alist.get(0)).getNum());
    //System.out.println(alist.get(1));
    System.out.println(alist.size());
        }
    }
      

  6.   

    看来大家没明白我的意思,我的意思并不是要输出什么结果(AListTest中的三个System.out.println与我的问题没什么关系),而是为什么一个对象的内容必须要从其父对象获得,这里面有什么知识?
    多谢高手给指点一下吧
      

  7.   

    因为你的add,是调super.add(),也就是说你是add到super里,所以取的时候就要从super里取。
    java的子类在实例化的时候,首先实例化一个父类。所以,你可以调用super的方法。
      

  8.   

    也就是说,两个A对象是被加到伴随AList实例化而生成的ArrayList实例里去了,是吗?
    如果是,我能不通过这个AList实例直接访问那个ArrayList实例吗?
    如果不是,是什么?
      

  9.   

    可以。所有的public 的方法,子类都已经继承。其实你根本不必覆盖这些方法。你的程序改为:
    class AList extends ArrayList {
        AList(){
            System.out.println("this is creat a child of ArrayList!");
        }    
    }
    其他的都不变,在运行一下看看。
      

  10.   

    我明白了。
    但是还有个问题,下面这个程序要把this改为super.toString(),否则死循环。
    这是否说明子类连被覆写的父类方法都继承下来了,只是调用它时要用super?
    如果是,那么伴随子类生成的父类对象岂不是没有意义了?
    如果不是,是什么?import java.util.*;
    public class A {
        public String toString() {
    return "address" + this;
        }    public static void main(String[] args) {
    ArrayList v = new ArrayList();
    for (int i = 0; i < 10; i++) {
        v.add(new A());
            }
    System.out.println(v);
        }
    }
      

  11.   

    不知道为什么自己要继承一个ArrayList类,我觉得完全没有必要。