实例变量作用范围-@public @private @protected @package(代码实例)

(1)@public (公开的)包含@protected的作用范围;并且在有对象的前提下,任何地方都可以直接访问。

(2)@protected (受保护的)只能在当前类和子类的对象方法中访问(在@interface  @end之间声明的成员变量如果不做特别的说明,那么其默认是protected的)

(3)@private (私有的)只能在当前类的对象方法中才能直接访问(定义在m文件中的类扩展部分或者是@implementation内

(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问

首先定义三个类,Person类,Children类,Animal类,其中Children类是Person类的子类。

Person类头文件:

#import <Foundation/Foundation.h>
@interface Person : NSObject
{
    NSString *name;
    @public int age;
    @private float wegiht;
}
-(void)setName;
-(void)setAge;
-(void)setWegiht;
@end

Person类m文件:

#import "Person.h"
//在当前类对象的方法中都能访问之前定义的实例变量,无论是@private,@protected,还是@public
@implementation Person
-(void)setName {
    name=@"wall";
    NSLog(@"%@",name);
}

-(void)setAge {
    age=20;
    NSLog(@"%d",age);
}

-(void)setWegiht{
    wegiht=50;
}
@end

 

接下来看Children类,也就是Person类子类的头文件和m文件

头文件:

#import "Person.h"

@interface Children : Person

@end

m文件:

#import "Children.h"
//由于name变量是@protected,age变量是@public,wegiht变量是@private ,所以Children类的对象方法中不能访问wegiht变量,而可以访问name变量和age变量
@implementation Children
-(void)setName {
    name=@"small wall";
}
-(void)setAge {
    age=8;
}
@end

如果访问私有变量wegiht,则会报错。

 

接下来看main文件:

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Children.h"
#import "Animal.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        //由于age变量是@public,所以在有对象的前提下,是可以直接访问,其他的变量是不可以直接访问的
        Person *xiaoming=[[Person alloc]init];
        [xiaoming setAge];//此时age=20
        xiaoming->age=24;//直接访问public变量
        NSLog(@"%d",xiaoming->age);
        
        Children *baobao=[[Children alloc]init];
        baobao->age=2;//直接访问public变量
        NSLog(@"%d",baobao->age);
    }
    return 0;
}

注意:里面的Animal类与Person类无关,所以就算age变量是@public,它的对象也不能直接访问age变量

最后输出结果:

2016-10-27 13:51:09.132 instacne variable[914:63406] 20

2016-10-27 13:51:09.133 instacne variable[914:63406] 24

2016-10-27 13:51:09.133 instacne variable[914:63406] 2

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值