public class Quardrangle{
private Quardrangle[] qtest = new Quardrangle[6];
private int nextIndex = 0;
public void draw(Quardrangle q){
if (nextIndex < qtest.length){ // ①
qtest [nextIndex] = q; // ②
System.out.println(nextIndex);
nextIndex++;
}
}
public static void main(String[] args){
Quardrangle q= new Quardrangle();
q.draw(new Sqare()); //③
q.draw(new Paralleogramgle());
}
}
class Sqare extends Quardrangle{
public Sqare(){
System.out.println("正方形");
}
}
class Paralleogramgle extends Quardrangle{
public Paralleogramgle(){
System.out.println("平行四边形");
}
}
麻烦大家给看一下,我标出来123的三句话什么意思? 尤其是③ 把对象作为参数是怎么用的? ①②中的比较有什么意义?
看了半个小时了 一点都看不懂
------解决方案--------------------
1.比较是防止数组越界;遍历数组,不能超过数组的大小,即数组中有5个元素,那么就限制你不能去第6个元素。
qtest [nextIndex] = q; // ②
2.这个的意思是 qtest [0] = q; // ② 即把数组中的第一个元素的值赋为q
3.就是qtest [0]=new Sqare()
------解决方案--------------------
建议你去看看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.
------解决方案--------------------
此处定义的数组为对象数组。数组的类型为Quardrangle,数组的大小为6,即给数组可以存储6个Quardrangle的对象。这个定义和一个int型数组是一样,int型数组放入的值都是int型的,以此类推,你将int变为Quardrangle就是这里定义的数组。这里还存在一个对象的向上转型。数组可以存入的Sqare对象,是因为Sqare?是Quardrangle子类,也即发生了多态。而程序中打印的“正方形”是因为Sqare类中重写了构造方法,创建一个新的对象,系统都会自动调用该类的构造方法。