A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 洪吉童 中级黑马   /  2015-10-24 11:59  /  1166 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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,编译器报错。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马