標籤:des style http os io 檔案 for 問題
Objective-C中,類的執行個體化變數的範圍有@private、@protected、@public。他們代表的意思和C++中相同,只是前面添加了一個@符號。下面介紹一下他們代表的範圍:
指令 |
意思 |
@private |
作用範圍只能在自身類 |
@protected |
作用範圍在自身類和繼承自己的子類,什麼都不寫,預設是此屬性。 |
@public |
作用範圍最大,在任何地方 |
下面是官方的圖:
具體的可以參考:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocDefiningClasses.html#//apple_ref/doc/uid/TP30001163-CH12-SW1
下面是一個例子,來說明他們之間的關係:
實現一個Boss類:
#import <Foundation/Foundation.h>
@interface Boss : NSObject
{
@private
int age;
@protected
NSString *job;
}
@end
實現一個Worker類繼承Boss類:
#import <Foundation/Foundation.h>
#import "Boss.h"
@interface Worker : Boss
{
NSString *name;
@private
NSString *evaluation;
@protected
float wage;
@public
NSString *boss;
}
- promoteTo:newPosition;
@end
在Worker的.m檔案中添加:
#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,這樣避免其他繼承類修改此屬性。