根据以下声明,
可以将子类数组分配给其超类的数组。可以将实现类的数组分配给其接口类型的数组。尺寸无关紧要。
我在下面写了示例代码来检查数组
中大小的行为interface I{}
class C implements I{}
/* dummy.java*/
public class dummy{
public static void main(String[] args){
C[] c = new C[6];
I[] i = new I[2];
c[0] = new C();
c[1] = new C();
c[2] = new C();
c[3] = new C();
c[4] = new C();
c[5] = new C();
i = c;
System.out.println(i[5].getClass());
}
}
当我说new C[6];
时,会创建一个[null,null,null,null,null,null]
类型的对象class [LC
,并且c
指向此对象。当我说new I[2];
时,会创建一个[null,null]
类型的对象class [LI
,并且i
指向此对象。
我的问题:
尽管在定义i[5]
后创建了一个对象[null, null]
,但当我说new I[2]
时,接口数组如何在这里工作?当我说i = c;
时到底发生了什么?接口new I[2];
期间是否修改了接口i = c;
数组的大小?
答案 0 :(得分:4)
该引用试图说的是数组的大小是对象的一部分,即。它不是引用或变量类型的一部分。
在
i = c;
您要将c
中保留的参考值的副本分配给i
。也就是说,i
会将同一个实例引用为c
。
接口新阵列I的大小[2];在分配期间进行修改i = c;?
不,这就是重点。 i
和c
只是变量。变量赋值没有副作用。
答案 1 :(得分:0)
当你设置
i=c
您正在设置i指向由c创建的对象。因此,i
现在将指向C[6];
<这个数组
所以...
i[1] = new I();
c[1]
将返回I object