本次主要学习面向对象的三大特性:封装、继承和多态中的封装
封装
1、 好处
降低耦合率
可重复调用类中的属性
提高安全性,外部不能随便修改变量的值,保证了数据的安全性
2、 set方法
1.作用:提供一个方法给外界设置成员变量,可以在方法里面对参数进行相应的过滤
2.命名规范
1> 方法名必须以set开头
2> set后面跟上成员变量的名称,成员变量的首字母必须大写
3> 返回值一定是void
4> 一定要接收一个参数,而且参数类型和成员变量类型一致
5> 形参的名称不能跟成员变量名一样
3、 get方法
1.作用:返回对象内部的成员变量
2.命名规范
1> 肯定有返回值,返回类型肯定与成员变量类型一致
2> 方法名为成员变量名去掉下划线 _ ,成员变量在定义时,一般以下划线 _ 开头
3> 不需要接收任何参数
4、 成员变量
命名规范:一定要用下划线 _ 开头
作用:
1.让成员变量和get方法区分开
2.可以跟局部变量区分,一看到下划线开头的变量,一般都是成员变量
5、 对象方法和类方法
1.对象方法
1> 减号 - 开头
2> 只能由对象调用
3> 对象方法中能访问成员变量(实例变量)
2.类方法
1> 加号 + 开头
2> 只能由类(名)来调用
3> 类方法中不能访问成员变量(实例变量)
3.类方法的好处
1> 不依赖于对象,执行效率高
2> 能用类方法尽量用类方法
3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法
允许类方法和对象方法同名
示例代码
#import <Foundation/Foundation.h> // 定义一个性别枚举
typedef enum {
SexMan,
SexWoman
} Sex; @interface Student : NSObject
{
// 成员变量
int _no;
Sex _sex;
}
// sex的set和get方法的声明
- (void)setSex:(Sex)sex;
- (Sex)sex;
@end @implementation Student
// sex的set和get方法的实现
- (void)setSex:(Sex)sex {
_sex = sex;
}
- (Sex)sex {
return _sex;
}
@end int main() {
// 创建一个学生对象
Student *stu = [Student new];
// 调用stu对象性别的set方法
[stu setSex:SexMan];
// 调用stu对象性别的get方法
NSLog(@"%d", [stu sex]); return ;
}