黑马程序员——OC基础---OC特有语法

                                                         ------<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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值