------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
面向对象的三大特性:封装(成员变量),继承和多态。
一,封装
在OC语言中,使用@interface和@implementation来处理类。
@interface就好像暴露在外面的时钟表面,像外界提供展示和接口。@implementation像是隐藏在时钟内部的构造实现,把具体的实现封装了起来,如图;
Set方法:
考虑到安全性的要求一般不在成员变量的前面加@public、@protected等关键字修饰,而是使用set方法。
set方法调用时也可以过滤掉一些不合理的赋值行为。
set方法的作用:为外界提供一个设置成员变量值的方法
命名规范:
1,方法名必须以set开头
2,set后面跟上成员变量的名称,首字母大写
3,返回值一定是void
4,一定要接收一个参数,且参数类型需要和成员变量的类型一致
5,形参名不能和成员变量名称一样
set方法的优点:1,成员变量不能直接被调用,保证了数据的安全性
2,对不合理的数据赋值请求可以进行过滤
set方法的使用例子:
set方法的声明
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
//这里不在使用@public关键字
int _age;
}
//set方法声明,接受一个参数
- (void)setAge:(int)age;
- (void)print;
@end
set方法的实现
@implementation Person
//set方法的实现
- (void)setAge:(int)age {
_age = age;
}
//实现print方法,打印age的值
- (void)print {
NSLog("age = %d",_age);
}
@end
创建Person对象:
int main()
{
Person *p = [Person new]
//使用set方法设置person类的age属性
[p setAge:10];
[p print];
return 0;
}
打印输出结果:age = 10
Get方法:
作用:为调用者返回对象内部成员变量的值
命名规范:
1,一定有返回值,返回值类型和成员变量的类型一直
2,方法明和成员变量名一样
3,不需要接收任何参数
get方法的实例:
get方法的声明:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
double _weight;
}
//设置set方法
- (void)setWeight:(double)weight ;
//设置get方法
- (void)weight;
@end
get方法的实现:
@implementation Person
//set方法的实现
- (void)setWeight:(double)weight
{
_weight = weight;
}
//get方法的实现
- (double)weight
{
return _weight;
}
@end
运行程序:
int main()
{
//创建一个Person对象
Person *p = [Person new]
//使用set方法为成员变量赋值
[p setWeight:68]
//使用get方法获取成员变量的值
NSLog("%f",[p weight]);
return 0;
}
程序运行结果:68
注意:set方法和get方法有时不一定都要有,例如当有些成员变量的值只需要读取不需要改变时,只需要有get方法即可。
成员变量名的命名以下划线开头,get方法不需要下划线,使用下划线有两个好处:
1,与get方法的方法名区分开
2,可以和其他局部变量区分开,下划线开头的变量,通常都是类的成员变量。
练习:
要求 :1,设计一个成绩类
2,这个类有一下四个属性:C的成绩(可读写),OC的成绩(可读写),总分(只读),平均分(只读)
声明:
#import <Foundation/Foundation.h>
//程序的声明
@interface Score : NSObject
{
int _CScore;//C分数
int _OcScore;//OC分数
int _TotalScore;//总分
double _average;//平均分
}
- (void)setCScore:(int)CScore;//用于设置C的分数
- (int)CScore;//返回C分数
- (void)setOcScore:(int)OcScore;//用于设置OC的分数
- (int)OcScore;//用于返回OC的分数
- (int)TotalScore;//用于返回总分
- (double)average;//声明一个平均数方法
- (void)print;//声明一个打印函数用于打印C和OC的分数
@end
实现:
//程序的实现
@implementation Score
- (void)setCScore:(int)CScore//设置C分数
{
_CScore = CScore;
}
- (int)CScore//返回C的分数
{
return _CScore;
}
- (void)setOcScore:(int)OcScore//设置OC分数
{
_OcScore = OcScore;
//这里直接运算总分和平均分,因为设置OC的分数时程序会调用该方法
_TotalScore = _CScore + _OcScore;//计算总分
_average = _TotalScore*0.5;//计算平均分
}
- (int)OcScore//返回OC分数
{
return _OcScore;
}
- (int)TotalScore//返回总分
{
return _TotalScore;
}
- (double)average//返回平均分
{
return _average;
}
- (void)print//打印C分数和OC分数
{
NSLog(@"C score is %d,OC score is %d",_CScore,_OcScore);
}
程序测试:
//主程序
int main()
{
//
Score *score = [Score new];
[score setCScore:60];//
[score setOcScore:80];//
[score print];//
//定义两个变量用于存储总分和平均分
int total = [score TotalScore];
double aver = [score average];
//打印总分和平均分
NSLog(@"TotalScore score is %d",total);
NSLog(@"average score is %f",aver);
}
@end
程序运行结果:
2014-12-11 16:06:55.160 a.out[30784:6034466] C score is 60,OC score is 80
2014-12-11 16:06:55.162 a.out[30784:6034466] TotalScore score is 140
2014-12-11 16:06:55.162 a.out[30784:6034466] average score is 70.000000