------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一.封装
*set方法
1.作用:提供一个方法给外界设置成员变量值,可以在方法里面进行过滤
2.命名规范:
1>方法名必须以set开头
2>set后面跟上成员变量的名称,成员变量的首字母必须大写
3>返回值一定是void
4>一定要接收一个参数,而且参数类型跟成员变量类型一致
—(void)setAge:(int)age;
5>形参的名称不能跟成员变量名一样
*set方法的实现
1.举例
—(void)setAge:(int)newAge
{
age = newAge;
}
2.对传进来的参数进行过滤
if(newAge<=0)
{
newAge = 1;
}
*get方法
1.作用:返回对象内部的成员变量
2.命名规范:
1>肯定有返回值,返回值类型肯定与成员变量类型一致
2>方法名跟成员变量名一样
3>不需要接收任何参数
—(int)age;
{
return age;
}
*成员变量的命名规范:一定要以下划线_开头
1.作用
1>让成员变量和get方法的各名称区分开
2>可以跟局部变量区分开,看到下划线开头的变量一般都是成员变量
二.封装的练习
/*设计一个成绩类
1>属性
*C语言成绩(可读可写)
*OC成绩 (可读可写)
*总分 (只读)
*平均分 (只读) */
#import <Foundation/Foundation.h>
@interface Score:NSObject
{
int _cScore;
int _ocScore;
int _totalScore;
int _averageScore;
}
-(void)setCscore:(int)cScore;
-(int)cScore;
-(void)setOcscore:(int)ocScore;
-(int)ocScore;
-(int)totalScore;
-(int)averageScore;
@end
@implementation Score
-(void)setCscore:(int)cScore;
{
_cScore = cScore;
}
-(int)cScore;
{
return _cScore;
}
-(void)setOcscore:(int)ocScore;
{
_ocScore = ocScore;
}
-(int)ocScore;
{
return _ocScore;
}
-(int)totalScore;
{
return _cScore +_ocScore;
}
-(int)averageScore;
{
return _totalScore/2;
}
@end
int main()
{
Score *s = [Score new];
[s setScore:90]
[s setocScore:80]
int a = [s totalScore]
NSLog(@"总分:%d",a);
return 0;
}
三.类方法
1.基本使用(类方法都是以+开头)
声明:+(void)printClassName;
实现:+(void)printfClassName
{
NSLog(@"这个类叫做Person");
}
2.与对象方法的区别
*对象方法
1>以减号—开头
2>只能由对象调用
3>对象方法中能访问当前对象的成员变量(实例变量)
3.类方法
1>以加号开头
2>只能由类名来调用
3>实例变量不能在类方法中访问
可以允许类方法和对象方法同名
4.类方法的好处和使用场合
1>不依赖于对象,执行效率高
2>能用类方法,尽量用类方法
3>场合:当方法内部不需要使用到成员变量时就可以改为类方法
5.类方法练习
/*设计一个计算器类
1>求和
工具类:基本没有任何成员变量,里面的方法都是类方法 */
#import <Foundation/Foundation.h>
@interface JiSuanQi:NSObject
+(int)sumOfNum1:(int)num1 andNum2:(int)num2;
+(int)averageOfNum1:(int)num1 andNum2:(int)num2;
@end
@implementation JiSuanQi
+(int)sum
{
return num1 + num2;
}
+(int)average
{
int sum = [JiSuanQi sumOfNum1:num1 andNum2:num2];
return sun/2
}
@end
int main()
{
int a = [JiSuanQi sumOfNum1:10 andNum2:12];
NSLog(@"a = %d",a);
return 0;
}
四.self关键字
1.self:指向了方法调用者,代表着当前的对象
2.举例
int _age = 20
NSLog(@"Person的年龄是%d岁",self->age);
-(void)bark
{
NSLog(@"汪汪汪");
}
-(void)run
{
[self bark]
NSLog(@"跑跑跑");
}
3.self的用途
1>概念:指向了当前对象(方法调用者)
2>可以利用SELF->成员变量,访问当前对象内部的成员变量
3>[self 方法名];可以调用其他对象方法或类方法
五.继承
1.继承的好处
1>抽取重复代码
2>建立了类之间的关系
3>子类可以拥有父类中的所有成员变量的方法
2.注意点
1>基本上所有类的根类是NSLobject
2>不允许子类和父类拥有相同名称的成员变量
3>父类放前面
4>父类和子类可以有相同的方法实现
*重写;子类重新实现父类中的某个方法,覆盖父类以前的做法
3.继承的场合使用
1>当两个类拥有相同的属性和方法的时候,就可以将相同的东西抽取到一个父类中
2>当A类拥有B类中的部分属性和方法时,可以考虑让B类继承A类
六.super关键字
1.super的作用
1>直接调用父类中的某个方法
2>super处在对象方法中,那么就会调用父类的对象方法;super处在类方法中,那么就会调用父类的类方法
3>使用场合:子类重写父类的方法时想保留父类的一些行为
七.多态(多种形态)_没有继承就没有多态
1.基本使用
1>多种形态:父类指针指向子类的对象
Dog *d = [Dog new];
Animal *a = [Dog new];
2.多态的好处
1>如果参数中使用的是父类类型,可以传入父类,子类对象
3.多态的局限性:父类整形的变量
1>不能用来调用子类的方法,必须加强为子类类型特有
2>变量后才能直接调用子类特有的方法
1>