oc——类——成员访问权限

成员访问权限

@interface FBAnimal : NSObject
{
    int _food1;
    
@private
    int _food2;
    
@protected
    int _food3;
    
@package
    int _food4;
    
@public
    int _food5;
}

@end

@interface FBAnimal ()
{
    int _food6;
    
@private
    int _food7;
    
@protected
    int _food8;
    
@package
    int _food9;
    
@public
    int _food10;
}

@end

@implementation FBAnimal
{
    int _food11;
    
@private
    int _food12;
    
@protected
    int _food13;
    
@package
    int _food14;
    
@public
    int _food15;
}

@end

@interface FBDog : FBAnimal

- (void)feed;

@end

@implementation FBDog

- (void)feed
{
    _food1 = 1;
    //_food2 = 2;  //private
    _food3 = 3;
    _food4 = 4;
    _food5 = 5;
    //_food6 = 6;  //private
    //_food7 = 7;  //private
    _food8 = 8;
    _food9 = 9;
    _food10 = 10;
    //_food11 = 11;  //private
    //_food12 = 12;  //private
    _food13 = 13;
    _food14 = 14;
    _food15 = 15;
}

@end

@interface FBHusky : FBDog

- (void)feed;

@end

@implementation FBHusky

- (void)feed
{
    _food1 = 1;
    //_food2 = 2;  //private
    _food3 = 3;
    _food4 = 4;
    _food5 = 5;
    //_food6 = 6;  //private
    //_food7 = 7;  //private
    _food8 = 8;
    _food9 = 9;
    _food10 = 10;
    //_food11 = 11;  //private
    //_food12 = 12;  //private
    _food13 = 13;
    _food14 = 14;
    _food15 = 15;
}

@end

void member_access_privilege()
{
    FBAnimal *animal = [[FBAnimal alloc] init];
    //animal->_food1 = 1;  //protected
    //animal->_food2 = 2;  //private
    //animal->_food3 = 3;  //protected
    animal->_food4 = 4;
    animal->_food5 = 5;
    //animal->_food6 = 6;  //private
    //animal->_food7 = 7;  //private
    //animal->_food8 = 8;  //protected
    animal->_food9 = 9;
    animal->_food10 = 10;
    //animal->_food11 = 11;  //private
    //animal->_food12 = 12;  //private
    //animal->_food13 = 13;  //protected
    animal->_food14 = 14;
    animal->_food15 = 15;
    
    FBDog *dog = [[FBDog alloc] init];
    //dog->_food1 = 1;  //protected
    //dog->_food2 = 2;  //private
    //dog->_food3 = 3;  //protected
    dog->_food4 = 4;
    dog->_food5 = 5;
    //dog->_food6 = 6;  //private
    //dog->_food7 = 7;  //private
    //dog->_food8 = 8;  //protected
    dog->_food9 = 9;
    dog->_food10 = 10;
    //dog->_food11 = 11;  //private
    //dog->_food12 = 12;  //private
    //dog->_food13 = 13;  //protected
    dog->_food14 = 14;
    dog->_food15 = 15;
    
    FBHusky *husky = [[FBHusky alloc] init];
    //husky->_food1 = 1;  //protected
    //husky->_food2 = 2;  //private
    //husky->_food3 = 3;  //protected
    husky->_food4 = 4;
    husky->_food5 = 5;
    //husky->_food6 = 6;  //private
    //husky->_food7 = 7;  //private
    //husky->_food8 = 8;  //protected
    husky->_food9 = 9;
    husky->_food10 = 10;
    //husky->_food11 = 11;  //private
    //husky->_food12 = 12;  //private
    //husky->_food13 = 13;  //protected
    husky->_food14 = 14;
    husky->_food15 = 15;
}

总结

  • 成员访问权限大小:@public > (@package,@protected) > @private
  • 成员访问权限只能修饰数据成员,数据成员定义在primary class interface或extension或primary class implement的{}内
  • 成员访问权限不能修饰方法成员(方法成员访问权限一概为@public),方法成员定义或实现在primary class interface或extension或primary class implement的{}外
  • 数据成员在primary class interface中默认访问权限为@protected,在extension或primary class implement中默认访问权限为@private
  • package指编译后生成的同一静态库,同一framework,同一可执行文件,@package访问权限指同一package内可访问
  • 成员访问权限只是oc代码层次的控制机制(从业务逻辑层面考虑),因此编译阶段有区别,但在目标代码层次无区别,因此链接阶段无区别
注1:项目引用静态库或framework时,项目只是依赖静态库或framework,并不属于同一package,因此不能访问@package访问权限成员
注2:类继承一概为public继承
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值