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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程金 中级黑马   /  2012-9-19 18:54  /  2064 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 程金 于 2012-9-20 15:41 编辑

百度了一下没找到统一答案,
说没有吧,但是new子类的时候,调用了父类的构造器,调用了构造器难道不是new父类实例对象?有什么区别?而且有父类的引用,可以调用父类方法的变量
说有吧,如果new了所有父类的实例对象的话,那不是很占内存和浪费时间吗

3 个回复

倒序浏览
new了,从内存分析。一个animal是父类,一个dog是子类。new出dog后,其对象在堆内存中。如图:大方块是子类dog对象在内存中的存在形式,小方块是父类animal在内存中的存在形式。

也就是new出子类后,从父类继承来的对象属性是存在父类对象中的,父类引用是super。
回复 使用道具 举报
这应该是多态上的问题!
java引用类型变量通常来讲会分为两种,一种是编译时的类型,另一种就是运行时的类型。编译时类型由声明该变量时的类型决定,运行时的类型由实际赋给该变量的类型决定。如果两者不一致就会出现多态!
其实呢子类就是一个特殊的父类(每次调用时时产生了父类对象就是他自己),因此java中才可以把一个子类对象直接的赋给一个父类的引用变量,不需要进行任何类型之间的转换!
回复 使用道具 举报
子类的构造函数在进行对象初始化时都会默认访问父类中的空参数构造函数
子类继承了父类后,存储了父类中的属性,必须要先看父类是如何对自己的属性进行初始化的
如果父类中没有提供空参数构造函数,子类的构造函数中必须通过super语句明确调用父类中的指定构造函数
初始化的动作要先完成,尤其是父类的初始化,所以如你所说会先访问下父类,如若不是这样 那么子类根本就无法得之自己继承了哪些方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马