Java内存管理问题。求大神赐教!

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()就显得毫无意义了)
求大神指教,我的推测是否正确,如果错误,以上代码在内存中是如何运行的?谢谢!

4个回答

qq_35337922
qq_35337922 谢谢大大~
3 年多之前 回复

在Java中,当用父类型引用指向了子类对象后,Java编辑器会根据引用的类型(Xoo),而不是根据对象的类型(Yoo)来检查调用方法是否匹配。

Xoo[ ] arr =new Yoo[4]与Xoo[ ] arr =new Xoo[4]的效果似乎一样,在堆中产生4个Xoo类型引用类型。
再使用arr[0] = new Yoo()时,父类型引用指向子类型对象,只能访问父类型的成员变量。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问