Objective-C 中public、protected、private 的使用

转载自:  http://www.open-open.com/lib/view/open1326155291578.html

Objective-C中,类的实例化变量的范围有@private、@protected、@public。他们代表的意思和C++中相同,只是前面添加了一个@符号。下面介绍一下他们代表的范围:

指令意思

@private

作用范围只能在自身类
@protected作用范围在自身类和继承自己的子类,什么都不写,默认是此属性。
@public作用范围最大,在任何地方

下面是官方的图:

Objective-C 中public、protected、private 的使用

具体的可以参考:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocDefiningClasses.html#//apple_ref/doc/uid/TP30001163-CH12-SW1

下面是一个例子,来说明他们之间的关系:

实现一个Boss类:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#import
 
 
 
 
<foundation foundation.h= "" >
 
  
  
  
  
  
  <span  class = "referer" >@interface</span> Boss : NSObject
  {
  
  
  
  
  
  <span  class = "referer" >@ private </span>          int age;
  @ protected
      NSString *job;
  }
  @end
 
 
 
 
</foundation>
实现一个Worker类继承Boss类:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#import
    
    
    
    
    <foundation foundation.h= "" >
     
     
     
     
     
#import "Boss.h"
     
     
     
     
     <span  class = "referer" >@interface</span> Worker : Boss
{
     NSString *name;
     
     
     
     
     <span  class = "referer" >@ private </span>     NSString *evaluation;
@ protected
     float wage;
     
     
     
     
     <span  class = "referer" >@ public </span>     NSString *boss;
}
- promoteTo:newPosition;
@end
    
    
    
    
    </foundation>
在Worker的.m文件中添加:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#import "Worker.h"
 
@implementation Worker
- promoteTo:newPosition
{
     id old = job;
     job = newPosition;
     return old;
}
-(NSString *)description
{
     return [NSString stringWithFormat:@ "Worker name:%@,evaluation:%@,job:%@,wage:%f,boss:%@" ,name,evaluation,job,wage,boss];
}
@end

如果我们在Worker中调用Boss中的私有变量age,会报错:

Objective-C 中public、protected、private 的使用

但是调用job是没有问题的。

下面在其他类中调用Worker类:

?
1
2
3
4
Worker *ceo = [[Worker alloc] init];
    ceo->boss = @ "XX" ;
    [ceo promoteTo:@ "YY" ];
     NSLog(@ ">>>=%@" ,[ceo description]);

运行结果:

Objective-C 中public、protected、private 的使用

但是调用protected的属性会报错:

Objective-C 中public、protected、private 的使用

所以当一些比较重要的属性,不能随便更改的时候,要用private,这样避免其他继承类修改此属性。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值