黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1 封装
封装指的是將对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法对内部信息的操作和访问。OC的封装特性需要通过使用访问控制符来实现。
#import <Foundation/Foundation.h>
@interface Sturent : NSObject
{
int _age;
double _weight;
}
-(void) test;
-(void) setAge:(int)NewAge;
-(int)age;
-(void) setWeight:(double)NewWeight;
-(double)_weight;
@end
@implementation Sturent
-(void) setAge:(int)NewAge
{
if (NewAge<=0)
{
NewAge=1;
}
_age = NewAge;
}
-(int)age
{
return _age;
}
-(void)setWeight:(double)NewWeight
{
_weight = NewWeight;
}
-(double)_weight
{
return _weight;
}
-(void) test
{
NSLog(@"年龄为%d体重为%f的学生在学习",_age,_weight);
}
@end
int main()
{
Sturent *stu = [Sturent new];
[stu setAge:23];
[stu setWeight:75.2];
[stu test];
}
1.1 访问控制符
1、@private:当前类访问权限。如果类的成员变量使用@private访问控制符来限制,则这个成员变量只能在当前类的内部被访问。这个访问控制符用于彻底隐藏成员变量。在类的实现部分定义的成员变量相当于默认使用这种访问权限。
2、@package:框架类访问权限。如果类的成员变量使用@package访问控制符来限制,则当前类或者同一框架中的其他类能够访问这个成员变量。这个访问控制符用于部分隐藏成员变量。
3、@protected:子类访问权限。如果类的成员变量使用@protected访问控制符来限制,则当前类或者其子类能够访问这个成员变量。这个访问控制符用于部分隐藏成员变量。
4、@public:公共访问权限。如果类的成员变量使用@public访问控制符来限制,则所有的类都能够访问这个成员变量。这个访问控制符用于彻底暴露成员变量,一般不建议这么做。
1.2 set和get方法
类里面的绝大部分成员变量应该使用@private进行限制,提供set和get方法访问该成员变量。
set方法
1.作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
2.命名规范:
1> 方法名必须以set开头
2> set后面跟上成员变量的名称,成员变量的首字母必须大写
3> 返回值一定是void
4> 一定要接收一个参数,而且参数类型跟成员变量类型一致
5> 形参的名称不能跟成员变量名一样
get方法
1.作用:返回对象内部的成员变量
2.命名规范:
1> 肯定有返回值,返回值类型肯定与成员变量类型一致
2> 方法名跟成员变量名一样
3> 不需要接收任何参数
#import <Foundation/Foundation.h>
typedef enum {
SexMan,
SexWoman
}Sex;
@interface Person : NSObject
{
int _age;
Sex _sex;
}
// age的set和get方法
- (void)setAge:(int)age;
- (int)age;
// sex的set和get方法
- (void)setSex:(Sex)sex;
- (Sex)sex;
@end
@implementation Person
- (void)setAge:(int)age
{
_age = age;
}
- (int)age;
{
return _age;
}
- (void)setSex:(Sex)sex
{
_sex = sex;
}
- (Sex)sex
{
return _sex;
}
@end
int main()
{
Person *p = [Person new];
[p setAge:23];
[p setSex:SexMan];
[p age];
[p sex];
return 0;
}