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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© D调的沉默 中级黑马   /  2014-5-6 07:40  /  1767 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 D调的沉默 于 2014-5-6 22:22 编辑

super关键字在继承中子类对象方法是指向父类对象吗?如果是指向父类对象,可是我只创建了子类对象啊?难道是创建了一个子类,就会同时自动创建个父类对象?

   如果我是n层继承关系,那就是说我创建了个最底层的子类对象,那么系统会自动创建好n-1个父类对象?求解答?

评分

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

查看全部评分

9 个回复

倒序浏览
本帖最后由 zfan 于 2014-5-7 05:13 编辑

当创建了一个子类对象时,该对象内部包含了一个父类的"子对象",这个被包含的父类"子对象"和你用父类直接创建出的对象是一样的。唯一区别是,父类的"子对象"被包装在子类对象的内部。这种创建是向外扩散的,先建立最根部的父类"子对象",然后一层一层向外建立并返回子类对象。就好像俄罗斯套娃的结构,先建立最里面的的人偶,然后层层向外包裹返回,每包裹一层就加上一层子类的属性和方法(包括重写父类的方法),最终返回一个完整的子类对象。这也是我理解的self=[super init]的实质。                                              PS:看到楼下的质疑了,回去又查了查资料,确实没有生成父类对象,我的理解有误,抱歉,看来自己还是要加强学习啊
回复 使用道具 举报
葬花桥 来自手机 中级黑马 2014-5-6 08:23:21
藤椅
本帖最后由 葬花桥 于 2014-5-6 08:30 编辑

不是这样的吧,super只是让子类可以调用父类方法,而且对象与对象之间是独立的,除非super指向了对象,但是父类没有创建对象,你想,要是父类也创建对象,那NSObject也要创建对象,事实上它是不能创建的!所以super应该是指向了父类,而不是它的对象,,可以让子类直接调用父类方法
回复 使用道具 举报
不需要,super直接调用父类中的方法,无需父类创建对象,拿init方法给你举例

super实际上通过子类的对象,指向子类本身,而后又指向了父类对象,最终指向NSObject。不用每一层级都创建出自己的对象。
上图摘自教学视频
\黑马程序员_iOS开发零基础入门教程\黑马程序员_IOS开发零基础教程-04Objective-C\02-面向对象\05-核心语法\构造方法
你可以从新看下
回复 使用道具 举报
桑托尔 发表于 2014-5-6 09:09
不需要,super直接调用父类中的方法,无需父类创建对象,拿init方法给你举例

super实际上通过子类的对象, ...

图片看不了
回复 使用道具 举报

\黑马程序员_iOS开发零基础入门教程\黑马程序员_IOS开发零基础教程-04Objective-C\02-面向对象\05-核心语法\构造方法04 -init方法执行过程.mp4
8分54秒,可以参考下这个图
回复 使用道具 举报
结合initialize来分析会比较好处理些
回复 使用道具 举报
葬花桥 发表于 2014-5-6 08:23
不是这样的吧,super只是让子类可以调用父类方法,而且对象与对象之间是独立的,除非super指向了对象,但是 ...

恩确实不会创建父类对象,2楼就是扯淡,super也不是指向了父类对象,而是一个指示器作用,指示去调用父类的方法。
回复 使用道具 举报
桑托尔 发表于 2014-5-6 09:09
不需要,super直接调用父类中的方法,无需父类创建对象,拿init方法给你举例

super实际上通过子类的对象, ...

你这个理解好像不对哦。因为创建子类对象压根就没有父类对象的,所以没有指向了父类对象,再指向NSobject对象
回复 使用道具 举报
D调的沉默 发表于 2014-5-6 22:22
你这个理解好像不对哦。因为创建子类对象压根就没有父类对象的,所以没有指向了父类对象,再指向NSobject ...

我错了 口误 压根父类不需要创建对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马