解决方案 »

  1.   

    1.比较是防止数组越界;
    2.如果不越界,则把正方形对象引用或正方形的子对象引用放入数组;
    3.在堆空间里new一个对象作为实参传给方法。
      

  2.   

    1.比较是防止数组越界;遍历数组,不能超过数组的大小,即数组中有5个元素,那么就限制你不能去第6个元素。
     qtest [nextIndex] = q;    // ②
    2.这个的意思是 qtest [0] = q;    // ②   即把数组中的第一个元素的值赋为q
    3.就是qtest [0]=new Sqare()
      

  3.   

      qtest [0]=new Sqare()这句话,对象怎么赋给数组? 他也不是值之类的。 还有 qtest [0]=new Sqare(),这样把Sqare()赋给了qtest[0], Sqare方法就会同时执行吗?  
      

  4.   

    建议你去看看java基础    方法参数程序执行是从main方法开始的
    也就是这里:
        public static void main(String[] args){
            Quardrangle q= new Quardrangle();
            q.draw(new Sqare());      //③
            q.draw(new Paralleogramgle());
        }第一句Quardrangle q= new Quardrangle();是创建了Quardrangle的对象q。第二句q.draw(new Sqare());
    q调用draw方法
    其中传入的参数是一个创建出来的 Sqare对象(Sqare是Quardrangle的子类,所以可以进行参数传递)
    程序再进行q.draw(new Sqare()) 的时候,首先执行的是  new Sqare()
    Sqare类设置了无参数的构造方法。
     就是:
    public Sqare(){
            System.out.println("正方形");
        }
    所以控制台会首先输出一个字符串:正方形
    然后调用对象q的draw方法
    执行
    if (nextIndex < qtest.length){     // ①
                qtest [nextIndex] = q;    // ②
                System.out.println(nextIndex);
                nextIndex++;
            }
    nextIndex设置的是0  qtest.length是数组的长度(值是6)
    执行if语句内的内容
    qtest [nextIndex] = q;   表示将q对象的属性qtest赋值,使qtest[0] = q;
    System.out.println(nextIndex); 表示输出nextIndex的值
    控制台输出0
    继续执行nextIndex++;
    q对象的属性nextIndex的值变成1。
    然后执行q.draw(new Paralleogramgle());
    因为Paralleogramgle同样是Quardrangle的子类
    并且Paralleogramgle类中设置了构造方法
    所以同样控制台输出:平行四边形
    这时候q对象中的nextIndex属性的值是1
    所以
    if (nextIndex < qtest.length){     // ①
                qtest [nextIndex] = q;    // ②
                System.out.println(nextIndex);
                nextIndex++;
            }
    qtest[1] = q;  
    q中的属性qtest数组被赋值
    System.out.println(nextIndex);
    输出1
    nextIndex++;
    nextIndex的值变成2.
      

  5.   

    此处定义的数组为对象数组。数组的类型为Quardrangle,数组的大小为6,即给数组可以存储6个Quardrangle的对象。这个定义和一个int型数组是一样,int型数组放入的值都是int型的,以此类推,你将int变为Quardrangle就是这里定义的数组。这里还存在一个对象的向上转型。数组可以存入的Sqare对象,是因为Sqare 是Quardrangle子类,也即发生了多态。而程序中打印的“正方形”是因为Sqare类中重写了构造方法,创建一个新的对象,系统都会自动调用该类的构造方法。
      

  6.   

    对象数组你有没有听说过,你不要把数组理解成了简单的数据类型数组。复杂一点的数组,比如字符串数组,字符串String它在java里面是引用数据类型,不是基本数据类型。那么对象也是引用数据类型,我这里就不解释了,和字符串一样的。同样的,你这里的private Quardrangle[] qtest = new Quardrangle[6];这是一个对象数据,明白不。这个数组里放的是一个一个的Quardrangle对象。