黑马程序员技术交流社区

标题: 继承的问题 [打印本页]

作者: Tony鱼先森    时间: 2015-4-20 11:51
标题: 继承的问题
本帖最后由 Tony鱼先森 于 2015-4-20 13:57 编辑

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

作者: 麻木    时间: 2015-4-20 13:31
@property声明的是私有 这样只能父类直接访问 子类不能直接访问 需要通过getter和setter访问。
父类的私有变量 子类不能直接访问

作者: 丶小千    时间: 2015-4-20 15:32
楼上的说错了,生成的是protected的,不属于私有,子类可以通过对象方法访问,是方法访问,用getter和setter访问,也就是点语法了。
作者: Tony鱼先森    时间: 2015-4-20 16:29
丶小千 发表于 2015-4-20 15:32
楼上的说错了,生成的是protected的,不属于私有,子类可以通过对象方法访问,是方法访问,用getter和sette ...

我查过资料了,通过@property合成的是@private作用域,通过显示声明的默认是@protected作用域
作者: 丶小千    时间: 2015-4-20 19:07
Tony鱼先森 发表于 2015-4-20 16:29
我查过资料了,通过@property合成的是@private作用域,通过显示声明的默认是@protected作用域 ...

我刚试了一下,弄了个Person类,通过@property设置了一个age属性,用Student继承它,学生对象可以使用age属性啊
作者: Tony鱼先森    时间: 2015-4-20 20:23

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


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



作者: Tony鱼先森    时间: 2015-4-20 20:24
丶小千 发表于 2015-4-20 19:07
我刚试了一下,弄了个Person类,通过@property设置了一个age属性,用Student继承它,学生对象可以使用age ...

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

好吧,讨论问题对于双方都是有好处的,大家共同进步
作者: itheima_llt    时间: 2015-4-21 15:15
经验啊... 向楼主学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2