A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈佳 中级黑马   /  2013-9-14 10:18  /  1200 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄兴旺 于 2013-9-23 12:03 编辑

最近学习视频对子父类中子类对象创建时内存的加载情况不太清楚,尤其是子父类中存在同名变量的情况,有没有哪位达人给指导一下,万分感谢!

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

2 个回复

倒序浏览


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

子类方法中有this(子类对象空间的引用)和super(父类对象空间的引用)。。没写的都是隐式调用了this。所以会让人产生 父类中同名成员变量 是否加载的疑惑。。非private只需用super一调用,private修饰就调用父类中调用该变量的方法的方法,即可发现在 对象创建时,父类的所有成员都以加载进内存空间~~^_^

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
在java中有一种说话叫继承树,这棵树描述了子类和父类的创建过程,不管我们是否使用super调用来执行父类的构造函数的初始化代码,子类构造函数总会调用父类的构造函数一次,
子类调用父类的构造函数有以下三种情况:
1.子类构造函数执行体的第一个使用super关键字,显式调用父类的构造函数,系统将根据super调用里传入的实参个数调用父类对应的构造函数。
2.子类构造函数执行体的第一行使用this显式嗲用本类中重载的构造函数,系统会根据this调用里传入的实参格式调用本类的另一个构造函数,执行本类中另一个构造函数时,即会调用父类的构造函数。
3.子类构造函数执行题中既没有super调用,也没有this调用,系统将会在执行子类构造函数之前,隐式的调用父类无参数的构造函数。

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

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

希望对你有所帮助。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马