黑马程序员技术交流社区

标题: 子父类中子类对象创建时内存加载情况 [打印本页]

作者: 陈佳    时间: 2013-9-14 10:18
标题: 子父类中子类对象创建时内存加载情况
本帖最后由 黄兴旺 于 2013-9-23 12:03 编辑

最近学习视频对子父类中子类对象创建时内存的加载情况不太清楚,尤其是子父类中存在同名变量的情况,有没有哪位达人给指导一下,万分感谢!
作者: 周文斌    时间: 2013-9-14 12:10


这就是 对象创建后 在内存中的情况。。是按俺自己的理解画的。
子类继承父类,创建子类对象后,将依据子类 和父类的描述在 堆 空间内新建对象,空间开辟规则不受任何条件约束(private等),只是在访问时收到权限限制。。

子类方法中有this(子类对象空间的引用)和super(父类对象空间的引用)。。没写的都是隐式调用了this。所以会让人产生 父类中同名成员变量 是否加载的疑惑。。非private只需用super一调用,private修饰就调用父类中调用该变量的方法的方法,即可发现在 对象创建时,父类的所有成员都以加载进内存空间~~^_^
作者: 2012    时间: 2013-9-14 12:58
在java中有一种说话叫继承树,这棵树描述了子类和父类的创建过程,不管我们是否使用super调用来执行父类的构造函数的初始化代码,子类构造函数总会调用父类的构造函数一次,
子类调用父类的构造函数有以下三种情况:
1.子类构造函数执行体的第一个使用super关键字,显式调用父类的构造函数,系统将根据super调用里传入的实参个数调用父类对应的构造函数。
2.子类构造函数执行体的第一行使用this显式嗲用本类中重载的构造函数,系统会根据this调用里传入的实参格式调用本类的另一个构造函数,执行本类中另一个构造函数时,即会调用父类的构造函数。
3.子类构造函数执行题中既没有super调用,也没有this调用,系统将会在执行子类构造函数之前,隐式的调用父类无参数的构造函数。

不管上面那种情况,当调用子类构造函数来初始化子类对象时,父类构造函数总会在子类构造函数执行前执行。依次类推就形成了继承树。创建java对象,最先执行的总是object类的构造函数。

关于父类和子类出现同名的变量,这个问题需要分几种情况,与变量的访问修饰符有关。

希望对你有所帮助。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2