Java内存管理,求教大神!

class Xoo{
int x;
}

class Yoo extends Xoo{
int y;
}

main方法中运行以下代码:

Xoo[ ] arr =new Yoo();

请问以上代码,在内存中是否为:
1.在栈中创建Xoo[ ]数组类型的引用变量
2.在堆中创建引用类型数组对象,共四个元素,每个元素为Xoo类型的引用,初始值为null(我原本以为数组每个元素应为Yoo类型的引用,但经过验证使用arr[0]只能调用Xoo类的方法而不能调用Yoo类的方法,不过这样new Yoo()就显得毫无意义了)

求大神指教,我的推测是否正确,如果错误,以上代码在内存中是如何运行的?谢谢!

不好意思,上面代码写错了,应该是

Xoo[ ] arr = new Yoo[4];

不好意思!

Xoo[ ] arr = new Yoo[4];
这个代码应该不能编译。Java不支持数组的协变。

在栈中创建Xoo[ ]数组类型的引用变量
在堆中创建引用类型数组对象,共四个元素,每个元素为Xoo类型的引用,初始值为null(我原本以为数组每个元素应为Yoo类型的引用
这两句是对的。

http://blog.csdn.net/java_0_day/article/details/51519012
你看一下我这篇博客,希望对你有帮助

仔细阅读深入java虚拟机第二章