一、类的封装
1.类封装的好处:把成员变量封装起来,不会被对象随便操作,赋值,要通过方法才可以对成员变量赋值,保障了成员变量的安全性
下面举个例子:
一个学生类,具有年龄属性,然后给他赋值,输出该学生的年龄
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
@public //注意,此处使用public,是为了能让对象给成员变量赋值
int age;//学生年龄
}
//没有定义方法
@end
@implementation Student
//暂时没有需要实现的方法
@end
int main()
{
Student *s = [Student new];
s->age=24;//给学生年龄赋值24岁
NSLog(@"该学生的年龄是:%d岁",s->age);
return 0;
}
以上代码运行输出结果: 该学生年龄是:24岁,结果输出正确,但是假如给学生年龄赋值-24呢?
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
@public <span style="font-family: Arial, Helvetica, sans-serif;">/注意,此处使用public,是为了能让对象给成员变量赋值</span>
int age;//学生年龄
}
//没有定义方法
@end
@implementation Student
//暂时没有需要实现的方法
@end
int main()
{
Student *s = [Student new];
s->age=-24;//给学生年龄赋值-24岁
NSLog(@"该学生的年龄是:%d岁",s->age);
return 0;
}
代码输出结果是 :该学生的年龄是:-24岁,这显然不符合我们的实际逻辑,因此,我们需要把成员变量给
封装起来,不要被对象随便赋值,这里用到了类的set方法和get方法
成员变量的变量名命名规范:成员变量变量名前要加“_”
set方法
1.作用:提供一个方法给外界设置成员变量值
2.命名规范:
1>方法名必须以set开头
2>set后面跟上成员变量的名称,成员变量的首字母必须大写
3>返回值一定是void
4>一定要有一个参数,并且参数类型和成员变量类型一致
5>形参名不能和成员变量名一样
get方法
1.作用:返回对象内部的成员变量的值
2.命名规则
1>肯定有返回值,而且参数类型和成员变量类型一致
2>方法名和成员变量名一样
3>不需要接受参数
利用set方法和get方法对以上代码进行修改
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
//@public 注意此处注释掉了@public
int _age;//学生年龄
}
- (void)setAge:(int)newAge;
- (int)age;
@end
@implementation Student
- (void)setAge:(int)newAge;
{
if(newAge<1)
{
newAge=1;
}
_age=newAge;
}
- (int)age
{
return _age;
}
@end
int main()
{
Student *s = [Student new];
// s->age=-24;//给学生年龄赋值-24岁
[s setAge:24];
int c = [s age];
NSLog(@"该学生的年龄是:%d岁",c);
return 0;
}
利用set方法对成员变量的值进行过滤,保证所赋的值符合实际,利用get方法获取成员变量的值
注意点:在声明成员变量的时候,前面不要加“@public”,如果添加的话就会使成员变量暴漏在外面,
起不到封装的作用
以上是对封装的理解和认识,有什么不足之处,请大家多多指点