OC-三大特征:封装、继承、多态

来源:互联网 发布:游戏编程入门 道森 pdf 编辑:程序博客网 时间:2024/05/22 05:33

封装的概念

将属性及方法相结合,共同体现对象的特性。封装可以隐藏内部实现,稳定外部接口

封装的好处:

使用起来更加简单变量更加安全可以隐藏内部实现开发更加快捷

封装的作用

类封装属性和方法方法封装了实现的代码属性封装了成员变量

例如

#import <Foundation/Foundation.h>@interface Student : NSObject{    //使用类封装成员变量    @public    NSString *_name;    NSInteger _age;    NSString *_homeAddress;}//使用 属性(@property) 封装成员变量,实现变量安全@property (nonatomic,strong)NSString *name;@property (nonatomic,assign)NSInteger age;@property (nonatomic,strong)NSString *homeAddress;//使用类封装功能代码- (void)helloworld;@end

继承的概念

继承是避免冗余,提高代码的 可重用性 和 维护 的有效手段继承需要符合的关系:is-a子类和父类都需要满足 is-a 关系,才存在继承继承概念下的 is-a 关系是单向关系子类具有父类的属性和行为,以及自身特殊的属性和行为

继承的特点

使用继承可以实现代码的复用,减少代码冗余OC中一个类可以继承另一个类,被继承的类称为父类或超类,继承的类称为子类或派生类子类可以直接拥有父类中所有允许子类继承的属性和方法子类可以改变父类中已有的方法,执行不同的代码实现OC中只允许单一继承,因为多重继承会有成为”致命方块“的问题

例如

//创建一个Father类,继承于NSObject//在接口文件中声明三个成员变量,姓名、年龄以及爱好,声明两个方法sayHello 和 charge@property (nonatomic,strong)NSString *name;@property (nonatomic,assign)NSInteger age;@property (nonatomic,strong)NSString *hobby;- (void)sayHello;- (void)charge;
//在实现文件中写入- (void)sayHello{    NSLog(@"Hello , my name is %@,I am your father",self.name);}- (void)charge{    NSLog(@"老子有钱,你随便刷");}
//创建一个Son类,继承于Father//接口文件中不声明成员变量,只声明life方法//在实现文件中写入//重写父类 Father 中 charge 方法时,返回值、参数名、参数列表相同//我们在Son.h文件中没有声明 charge 方法,但是这里我们可以直接重写,因为Son 继承于 Father - (void)charge{    [super charge];    NSLog(@"老爸有钱,我随便刷");}- (void)life{    NSLog(@"日常飙车");}//子类拥有自身特殊的属性或行为

多态的概念

就是对于不同对象响应同一个方法时做出的不同反应。它是建立在继承的基础上面1.继承于同一父类的子类,他们本身具有自己的特征2.继承于同一父类的子类,他们在执行同一命令的时候,可以具有不同的效果

多态的好处

1.可以简化编程接口    允许多个类中定义同一消息接口    可以定义一个通用的调用方法,以简化调用2.可以把不同的子类对象都当做父类来看    可以屏蔽不同子类对象之间的差异,写出通用的代码    做出通用的编程,以适应需求的不断变化

例如

//可以简化编程接口//我们创建一个Animal类,再创建Cat类以及Dog类继承于Animal类。并分别声明eat方法在main.m文件中写入://由于id类型的通用性质,我们可以将创建好任意对象赋值给animalid animal = nil;    animal = [Cat new];  [animal eat];animal = [Dog new];[animal eat];//此处我们可以看到,使用多态进行实现时,我们不需要创建cat、dog对象,直接创建一个animal对象就可以分别对cat、和dog的方法进行调用,这就是多态的简化编程接口

例如

//我们在之间的基础上创建一个Person类,让他具有喂养动物 feedAnimal 的方法,以实现人喂养动物//在接口文件中声明 feedAnimal 方法- (void)feedAnimal:(Animal *)animal;
//在实现文件中写入- (void)feedAnimal:(Animal *)animal{    if ([animal isMemberOfClass:[Cat class]]) {        NSLog(@"人喂猫");        [animal eat];    }    if ([animal isMemberOfClass:[Dog class]]) {        NSLog(@"人喂狗");    }}
//在main.m文件中写入Cat *cat = [Cat new];Dog *dog = [Dog new];Person *person = [Person new];[person feedAnimal:cat];[person feedAnimal:dog];//我们在Person类中,仅保留了一个喂养方法feedAnimal,参数是父类型动物类型,无论喂养什么动物,均能满足需求,而不需要修改学员类,增加相应的喂养方法。
0 0
原创粉丝点击