class Xoo{
int x;
}
class Yoo extends Xoo{
int y;
}
main方法中运行以下代码:
Xoo[ ] arr =new Yoo[4];
请问以上代码,在内存中是否为:
1.在栈中创建Xoo[ ]数组类型的引用变量
2.在堆中创建引用类型数组对象,共四个元素,每个元素为Xoo类型的引用,初始值为null(我原本以为数组每个元素应为Yoo类型的引用,但经过验证使用arr[0]只能调用Xoo类的方法而不能调用Yoo类的方法,不过这样new Yoo()就显得毫无意义了)
求大神指教,我的推测是否正确,如果错误,以上代码在内存中是如何运行的?谢谢!
http://www.cnblogs.com/vamei/archive/2013/04/28/3048353.html
在Java中,当用父类型引用指向了子类对象后,Java编辑器会根据引用的类型(Xoo),而不是根据对象的类型(Yoo)来检查调用方法是否匹配。
Xoo[ ] arr =new Yoo[4]与Xoo[ ] arr =new Xoo[4]的效果似乎一样,在堆中产生4个Xoo类型引用类型。
再使用arr[0] = new Yoo()时,父类型引用指向子类型对象,只能访问父类型的成员变量。