您的位置:首页 > 其它

OC学习笔记三---面向对象三大特性

2015-01-27 15:56 197 查看

一、封装

1.为什么要封装?

在前面的学习中,我们如果要访问成员变量,就直接在成员变量的声明之前加上@public,而这样成员变量就直接暴露给了外界,这样是不安全的。封装就是不允许外界直接访问成员属性,提供set和get方法给外界,用于设置和获取属性的值。我们可以在set方法里面对参数进行过滤,防止外界的恶意修改。

2.set和get方法的使用

在@interface中加入set和get方法的声明

@interface student
......
/*set方法*/
- (void) setAge:(int)age;
/*get方法*/
- (int) age;
@end


在@implementation中加入set和get方法的实现

@implementation Student
......
// set方法的实现
- (void) setAge:(int)age
{
if (age<=0)
{
age= 1;
}

_age= age;
}

// get方法的实现
- (int) age
{
return _age;
}
@end


调用方法有两种:一种是使用[p setAge],[p age],另一种是使用点语法,p.age,编译器会根据是赋值还是被赋值来判断使用get方法还是set方法。

二、继承

1.对继承的理解

如果两个类有相同的属性和行为,可以抽取出来组成一个新的类,这个新的类就是前面两个类的父类。类似动物的分类,像猫和老虎外形和行为都有相同的地方,就可以把他们分为猫科动物。子类如果继承了父类,就会有父类所有的属性和方法。子类是对父类的一个扩充。

2.继承基本用法

动物都有体重属性和吃的行为,把它们抽取出来组成一个父类

// Animal的声明
@interface Animal : NSObject
{
@public
int weight;
}
- (void)eat;
@end
// Animal的定义
@implementation Animal
- (void)eat {
NSLog(@"吃吃吃-体重:%d", weight);
}
@end


Bird和Dog都属于动物,所以继承动物,并且扩充了一些行为。

// Bird的声明
@interface Bird : Animal
{
@public
int height;
}
- (void)fly;
@end

// Bird的定义
@implementation Bird
- (void)fly {
NSLog(@"飞飞飞-高度:%d", height);
}
@end


// Dog的声明
@interface Dog : Animal
{
@public
int speed;
}
- (void)run;
@end
// Dog的定义
@implementation Dog
- (void)run {
NSLog(@"跑跑跑-速度:%d", speed);
}
@end


3.使用继承注意事项

1)OC中的继承是单继承

2)使用super调用父类的类方法和对象方法

3)子类和父类不能有相同的成员变量

4)在子类中可以重写父类的方法

5)调用某个方法时,优先去当前类中找,如果找不到,去父类中找

6)父类必须声明在子类之前

三、多态

多态的产生是由于继承,但是与继承相比,多态就简单多了。多态的核心总结起来就一句话“子类对象赋值给父类指针”。例如:Animal *a = [Dog new];

多态最常用的用法就是在方法的参数中使用,参数类型定义为父类类型,调用方法的时候用子类类型。这样就增加了方法调用的灵活性。多态也有一个局限性:父类类型的变量不能直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: