问题一 为什么对象数组的类型要一致?
在java2使用教程第6版P106中写道:数组是相同类型变量按顺序组成的集合。既然对象数组存的是对象的引用,而且初始化的时候是null的,为什么我不可以随便把其他类型的对象赋值给这个数组呢?那样多爽呀,一个数组可以存一大堆对象了,直接变博物馆。
那回忆一下基本数据类型的数组,没少用过for循环吧?利用循环,我们可以遍历数组里面的数据,那代入对象数组,我们也可以用for循环遍历对象的各个属性与方法。想一下,如果这个数组存的是不一样类型的对象,那你怎么遍历?所有编译器会规定你所赋值的对象要和数组类型一样。如果我要存的所有对象都有相应的属性和方法,那我可以存一个对象数组里面了吧?那你能保证所有的对象真的一丝不误的有相同的属性和方法给你在后面调用吗?为了杜绝这种不应该的错误,编译器只能按类来约束对象数组的数据,一个类出来的对象肯定存在相同的属性和方法。
问题二 为什么子类对象可以存进父类对象数组里面?
为什么呢?直接这样想其实是很难想明白的,那么换个角度,为什么非子类对象不可以存进父类对象数组里面?去测试一下,
class Father {}
class One extends Father {}
class Two {}
public class Test2 {
public static void main(String[] args) {
Father[] arr = new Father[5];
arr[0] = new One();
arr[1] = new Two();
}
}
这个结果就可以看到这个问题的答案了,编译器会自动将你赋值的非父类对象进行向上转型,转换成对象的上转型对象再存进对象数组里面。
关于对象数组的一些基本使用可以看一下这个Java中对象数组的使用方法详解。