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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Tony鱼先森 中级黑马   /  2015-4-20 11:51  /  2732 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Tony鱼先森 于 2015-4-20 13:57 编辑

为什么在@property中合成的属性,在子类不能直接访问啊,不是说自己完全继承了父类吗?

评分

参与人数 1黑马币 +2 收起 理由
hitboomer + 2 新人来学习……

查看全部评分

9 个回复

倒序浏览
@property声明的是私有 这样只能父类直接访问 子类不能直接访问 需要通过getter和setter访问。
父类的私有变量 子类不能直接访问
回复 使用道具 举报 1 0
楼上的说错了,生成的是protected的,不属于私有,子类可以通过对象方法访问,是方法访问,用getter和setter访问,也就是点语法了。
回复 使用道具 举报
丶小千 发表于 2015-4-20 15:32
楼上的说错了,生成的是protected的,不属于私有,子类可以通过对象方法访问,是方法访问,用getter和sette ...

我查过资料了,通过@property合成的是@private作用域,通过显示声明的默认是@protected作用域
回复 使用道具 举报
Tony鱼先森 发表于 2015-4-20 16:29
我查过资料了,通过@property合成的是@private作用域,通过显示声明的默认是@protected作用域 ...

我刚试了一下,弄了个Person类,通过@property设置了一个age属性,用Student继承它,学生对象可以使用age属性啊
回复 使用道具 举报

你看一下吧,从左到右,Person.h、Person.m、Student.h、Student.m


这个断点显示,Student的实例s内是具有_age属性的,但是在类内不能直接访问,但是_higt可以直接访问,因为一个的作用域是private,一个是protected


评分

参与人数 1技术分 +1 收起 理由
Micro + 1 赞一个!

查看全部评分

回复 使用道具 举报
丶小千 发表于 2015-4-20 19:07
我刚试了一下,弄了个Person类,通过@property设置了一个age属性,用Student继承它,学生对象可以使用age ...

看我六楼的回复吧……
回复 使用道具 举报
楼主误会我的意思了,我是说可以通过set和get方法访问,并没有说可以直接访问。我又看了一下楼主的问题,我也看错了楼主的意思了,我以为楼主说的是没有办法访问,楼主说的是直接访问。另外,我也一直以为在子类中私有变量是没法用set和get访问的,所以才有了3楼说的那句话。搞了那么多话也纠正了我的认知,也可能是因为敲了那么多题从来没有用过直接访问造成的,导致连直接访问是啥都忘了,不过敲代码赋值的时候还是推荐用set方法赋值。浪费了不少口舌对我来说还是有收获的。
回复 使用道具 举报
丶小千 发表于 2015-4-21 11:12
楼主误会我的意思了,我是说可以通过set和get方法访问,并没有说可以直接访问。我又看了一下楼主的问题,我 ...

好吧,讨论问题对于双方都是有好处的,大家共同进步
回复 使用道具 举报
经验啊... 向楼主学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马