标签:
封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java中有四种访问权限修饰符:
public,default,protected,private
访问权限依次递减,这样我们在定义类的时候,哪些字段和方法不想暴露出去,哪些字段和方法可以暴露,可以通过修饰符来完成,这就是封装,下面来看一个例子吧:
#import @interface Car : NSObject{ //这个属性就是对外进行保密的相当于private,所以我们需要在外部访问的话,必须定义get/set方法 //默认的是private的,但是我们可以使用@public设置为public属性的,那么在外部可以直接访问:person->capcity = 2.8; //当然我们一般不这么使用,因为这会破坏封装性,这种用法相当于C中的结构体中权限 //一共四种:@public,@protected,@private,@package,这个和Java中是相同的 @public float _capcity; //油量属性 } - (void)run:(float)t; @end
这里我们可以看到,OC中也是有四种访问权限修饰符:
@public、@protected、@private、@package
其中默认的修饰符是@private
但是这里要注意的是:OC中的方法是没有修饰符的概念的,这个和Java有很大的区别,一般都是公开访问的,即public的,但是我们怎么做到让OC中的一个方法不能被外界访问呢?
OC中是这么做的,如果想让一个方法不被外界访问的话,只需要在.m文件中实现这个方法,不要在头文件中进行定义,说白了就是:该方法有实现,没定义,这样外界在导入头文件的时候,是没有这个方法的,但是这个方法我们可以在自己的.m文件中进行使用
@public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检、水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数
1) 作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值
2) 命名规范:
方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写
形参名称不要跟成员变量同名
1) 作用:返回对象内部的成员变量
2) 命名规范:get方法的名称一般就跟成员变量同名
成员变量都以下划线 _ 开头
可以跟get方法的名称区分开
可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量
1 #import <Foundation/Foundation.h> 2 // 声明 3 @interface Car : NSObject 4 { 5 int _wheels; // 轮子个数 6 } 7 /*set方法*/ 8 - (void) setWheels:(int)wheels; 9 /*get方法*/ 10 - (int) wheels; 11 @end 12 13 @implementation Car 14 // set方法的实现 15 - (void) setWheels:(int)wheels 16 { 17 // 对外面传进来的轮子数进行过滤 18 if (wheels<=0) 19 { 20 wheels = 1; 21 } 22 23 _wheels = wheels; 24 } 25 26 // get方法的实现 27 - (int) wheels 28 { 29 return _wheels; 30 } 31 @end
标签:
原文地址:http://www.cnblogs.com/latiao/p/4571529.html