OC中的私有变量 在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private的。在.m中定义的成员变量不能和它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳的。
声明一个类:
[cpp] view plaincopy
- #import<Foundation/Foundation.h>
- @interface Person : NSObject
- {
- int _age;//默认是protect类型,能在当前类和子类中使用
- @private
- NSString *_name//_name不能在子类中使用,但是可以被子类继承
- }
- -(void)run;
- -(void)eat;
- @end
类的实现:
[cpp] view plaincopy
- #import"Person.h"
- //在.m中定义实例变量
- //纯属私有变量,该变量只能在类中使用,不能被子类继承,也不能被子类使用
- int m=100;
- @implementation Person
- -(void)run{
- NSLog(@"人正在走,速度是%d",m);//可以访问m
- }
- -(void)eat{
- NSLog(@"m=%d",m);//可以访问m
- }
main实现:
[cpp] view plaincopy
- <pre name="code" class="cpp"><p><pre name="code" class="cpp">#import <Foundation/Foundation.h>
- #import "Person.h"
- int main(int argc, constchar * argv[]) {
- @autoreleasepool {
- Person *per=[Person new];
- [per eat]; //<span style="font-family: Arial, Helvetica, sans-serif;">可以访问m</span>
- [per run];
-
- }
- return 0;
- }
在累的实现代码中定义的m就是一个私有变量,该变量只能在该类中使用,不能被子类继承,也不能被子类使用。下面测试一下
创建一个继承类Student
[cpp] view plaincopy
- #import<Foundation/Foundation.h>
- @interface Student : Person
- {
- }
- -(void)run;
- @end
实现这个继承类:
[cpp] view plaincopy
- #import"Student.h"
- @implementation Student
- -(void)run{
- NSLog(@"人正在走,速度是%d",m);//此处报错,Person类.m中定义的变量不能在此处使用
- }
这个继承类的对象方法中使用了其父类中的私有变量m,编译器报错。
|