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虚拟机第二章