1、成员访问类型 @private:私有成员,不能被外部函数访问(使用),也不能被子类继承; @protected:保护成员,不能被外部函数访问,可以被子类继承; @public:公有成员,可以被外部函数访问,也可以被子类继承。 @package(框架级别的): 作用于框架级别的
成员访问类型总结:
- 继承关系:@private不能被子类继承;@protected可以被子类继承;@public可以被子类继承
- 访问关系:a,不论成员变量是什么访问类型,成员方法内部都可以直接访问
//不论成员变量是什么访问类型,成员方法内部都可以直接访问 -(void)run{
NSLog(@"%@",self->_name);//public NSLog(@"%d",self->_age);//protected NSLog(@"%@",self->_color);//private NSLog(@"正在狂奔!"); } |
b,其他类:如果其他类想要访问有2种情况,一是作为另一个类的成员变量,另一个是作为另一个类对象方法的形参或者局部变量。但对于这2中情况,都只能访问类型为@public的成员变量 #import "Person.h"
@implementation Person //作为成员变量访问 -(void)setProps{ NSLog(@"%@",_animal->_name);//只能访问@public类型的 }
//作为形参(形参也是局部变量)访问 -(void)setProps:(Animal*)animal{ NSLog(@"%@",animal->_name);//只能访问@public类型的 } @end |
c,子类:测试了一下子类无法使用super访问父类中的任何成员变量,但是可以使用super访问父类的成员方法。如果在子类中把父类作为局部变量创建,可以访问父类中的@protected和@public属性
|