日期:2014-05-20  浏览次数:20699 次

Java中Object与Object[]为何满足类型相容
今天在重温java基础的时候在《疯狂java讲义》中看到了这样一句话
“如果想在java语言中实现这种可无限扩展的数组,则可以定义一个Object[]类型的数组,这个数组元素是Object类型,因此可以再次指向一个Object类型的数组”(p101)
用代码来说就是这个意思:

Object[] b = new Object[3];
b[1] = new Object[3];

java中Object和Object[]满足类型相容,这让我非常困惑,为何其他的引用类型,例如String和String[]不满足类型相容

String[] s = new String[3];
s[1] = new String[3];

后面的代码会显示Type mismatch: cannot convert from String[] to String
Object与Object[]为何满足类型相容,希望能得到大家的解释

------解决方案--------------------
这个问题很简单,因为Object[] 里面放的是Object对象以及它的子类,什么意思呢?就是所有的对象了,因为所有的对象都是Object的子类,所以Object数组里面可以放Object数组
而String[]里面可以放String对象和String对象所有的子类,但是String对象是没有子类的,所以只能放String对象,而不能放String[]数组。大概就这样了
------解决方案--------------------
Object是所有对象的父类。
Object[] b = new Object[3];
b[1] = new Object[3];
凡是被new出来都是对象。
所以Object(父类)可以指向任何被new出来的对象(子类)。


String[] s = new String[3];
s[1] = new String[3];
s是一个String类型的数组,所以s[1]是一个String类型的元素。
new String[3]是一个数组。String类型的元素(s[1]),不能指向数组。
------解决方案--------------------
"everything is object"
------解决方案--------------------
引用:
"everything is object"

数组和对象,是充分非必要关系:所有数组一定是对象,但对象不一定是数组。