1.封装:一个类中可以有多个属性和方法,把这些成员封装在一个类中当做一个整体使用。
2.封装的好处:以类为单位来管理这些代码,可以便于代码的维护和管理。并且对外部屏蔽内部的具体实现,对外部来说只是一个对象。
3.类的三要素:类名,成员变量,方法
4.只有getter方法没有setter方法叫只读封装,只有setter方法没有getter方法叫只写封装。
5.为类提供一种专门为实例变量赋值的方法 setter
1.这个方法一定是一个对象方法,因为只有对象方法才能直接访问实例变量。
2.这个方法一定没有返回值,为实例变量赋值不需要返回值。
3.这个方法一定是有参数的,为实例变量赋值一定需要传入一个和实例变量类型相同的参数。
4.这个方法的方法名以set开头,后面跟实例变量名去掉下划线,并首字母大写。
为类提供一种专门访问实例变量的值的方法 getter
1.这个方法一定是一个对象方法,因为只有对象方法才能直接访问实例变量。
2.这个方法一定有返回值,供外界访问实例变量,必须要返回给调用者实例变量的值。
3.这个方法一定没有参数,访问实例变量的值不需要传入任何参数。
4.这个方法的方法名就是去掉下划线的实例变量的名字。
//Person.h文件
#import
@interface Person : NSObject
{
//不要给实例变量@public修饰
int _age;
}
//setter声明
- (void)setAge:(int)age;
//getter声明
- (int)age;
@end
//Person.m文件
#import "Person.h"
@implementation Person
//setter实现
- (void)setAge:(int)age{
//传入的年龄在 0 - 120之间才能赋值,否则输出提示
if(age > 0 && age < 120){
_age = age;
}else{
NSLog(@"年龄不符合");
}
}
//getter实现
- (int)age{
return _age;
}
@end
//main.m文件
#import
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//实例化一个对象p
Person *p = [Person new];
//调用p对象setAge方法为对象的实例变量赋值
[p setAge:200];//因为不符合规范,会打印出 年龄不符合
//输出p对象的实例变量age的值
NSLog(@"age = %i",[p age]);//输出 age = 0
}
return 0;
}
6.如果实例变量要被外界访问,那么就需要给它封装一个setter和getter方法。