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