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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北极星 初级黑马   /  2014-3-17 19:15  /  1181 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

子类继承父类 ,继承的属性是保存在父类的内存中 还是 每个继承的子类都要拷贝一份父类的属性。

3 个回复

倒序浏览
我觉是这么理解
当用子类创建一个对象以后,这个对象的属性所占的内存等于 父类的属性+子类属性所占的内存,而你说的那个是不是所有子类都要拷贝一份父类的属性,我觉得肯定不是。
回复 使用道具 举报
如果是通过@property声明的属性默认会生成带下划线的成员变量,setter和getter方法声明和实现。
只有类创建出来的对象才有成员变量,默认是0或者nil。所以成员变量是保存在所创建出来得对象内存中。

而子类继承父类的话,setter和getter的方法的声明和实现会保存在父类(类对象)中,当调用setter或getter方法时首先会根据方法的地址去这个类中找,没有在去父类中找。
回复 使用道具 举报
1.继承的属性是保存在父类的内存中 ,这是肯定不可能的
2.每个继承的子类都要拷贝一份父类的属性。
关于第二点,想想我们的代码,你如何知道子类可以使用父类的代码(方法)?或者说你如何调用自己的方法?
先看看我们如何使用自己的方法:我们在点h文件中声明使用的方法,对不,然后使用的时候去找我们声明了哪些可用的方法(虽然在@implementation中也可以不声明直接写方法的实现,但调用父类的方法肯定是它在@interface中声明的方法,前者默认是@private,后者默认是@protect).
由此我想到,即使我继承了Father类,要想使用Father下面的方法,只需要通过其import的点h文件找找看有哪些可用的方法,而不是把整个父类copy过来.当我使用A方法,我就把Father的A方法放到内存中使用,并不需要事先把父类所有代码都copy到子类。
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马