Objective-C 中public、protected、private 的使用
Objective-C中,類的實例化變量的范圍有@private、@protected、@public。他們代表的意思和C++中相同,只是前面添加了一個@符號。下面介紹一下他們代表的范圍:
| 指令 | 意思 |
| @private |
作用范圍只能在自身類 |
| @protected | 作用范圍在自身類和繼承自己的子類,什么都不寫,默認是此屬性。 |
| @public | 作用范圍最大,在任何地方 |
下面是官方的圖:
下面是一個例子,來說明他們之間的關系:
實現一個Boss類:
#import實現一個Worker類繼承Boss類:@interface Boss : NSObject { @private int age; @protected NSString *job; } @end
#import在Worker的.m文件中添加:#import "Boss.h" @interface Worker : Boss { NSString *name; @private NSString *evaluation; @protected float wage; @public NSString *boss; } - promoteTo:newPosition; @end
#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,會報錯:

但是調用job是沒有問題的。
下面在其他類中調用Worker類:
Worker *ceo = [[Worker alloc] init];
ceo->boss = @"XX";
[ceo promoteTo:@"YY"];
NSLog(@">>>=%@",[ceo description]);
運行結果:
![]()
但是調用protected的屬性會報錯:
![]()
所以當一些比較重要的屬性,不能隨便更改的時候,要用private,這樣避免其他繼承類修改此屬性。
本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
