OC学习中关于@private@protected@pakege@public的访问权限和继承问题

来源:互联网 发布:知乎 余建春卡迈克尔数 编辑:程序博客网 时间:2024/04/28 09:33

我遇到的问题是为什么父类的实例变量name是用@protected修饰的,但子类就是访问不了。后来发现@protected修饰的成员变量(注意区别于全局都能访问的@public)只能在子类中(注意是子类的定义中即@interface@end@implementation@end中才能访问,直接(用->)间接(用函数)都可以访问),但在外部就不行了,比如我犯的错就是在外部main函数中son1->name,编译提示name变量被protected,无法访问。具体看学习时测试的代码回忆,转换测试一下就知道。

#import<Foundation/Foundation.h>@interface Father : NSObject{//@private @protectedint name;}//@property int name;//-(int)getyourfathername;-(void) info;@end@implementation Father//{int name;}-(void)info{NSLog(@"i am you father");}//-(int)getyourfathername{//name=6;//return name;//}@end@interface Son :Father-(void)visit:(int)a;@end@implementation Son-(void)visit:(int)a{self->name=a+100;NSLog(@"visit display:%d",name);}@endint main(int argc,char *argv[]){@autoreleasepool{Son* son1=[[Son alloc]init];[son1 visit:888];//NSLog(@"output:%d",[son1 getyourfathername]);//son1->name=3;//NSLog(@"the name of son is:%d",son1->name);[son1 info];}return 0;}


参考文章:http://www.cnblogs.com/chenyg32/p/4803684.html



0 0