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

封装的概念

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

封装的好处:

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

封装的作用

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

例如

#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类型的通用性质,我们可以将创建好任意对象赋值给animal
id 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,参数是父类型动物类型,无论喂养什么动物,均能满足需求,而不需要修改学员类,增加相应的喂养方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值