objective-c自学总结(三)---面向对象的封装,继承与多态
2015-05-22 12:28
417 查看
面向对象的三大特性
封装继承
多态
1.封装:
隐藏属性,方法或实现细节的过程称为封装信息隐藏,隐藏对象的实现细节,不允许用户看到 将东西包装在一
然后以新的完整形式呈现出来 例如,两种或多种化学药品组成一个胶囊
将方法和属性一起包装到一个单元中,单元以类的形式实现 对象同时具有属性和方法两项特性
对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相成,不能分割
2继承:
2.1继承的定义:
A是B如果这句话能说得通,在设计程序的时候就可以看成是继承关系
子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性
为什么要用继承:观察下面两段代码
//卡车类 @interface Truck : NSObject { // 品牌 NSString *_brand; //颜色 NSString *_color; float _maxWeight; } -(id)initWithlamp:(float)wattage; //启动 -(void)star; //刹车 -(void)stop; @end
//出租车类 @interface Taxi : NSObject { // 品牌 NSString *_brand; //颜色 NSString *_color; float _company; } -(id)initWithengine:(NSString*)model Withcapacity:(NSInteger)capacity; //启动 -(void)star; //刹车 -(void)stop; @end
代码存在很明显的重复现象
如何改进?有没有可能建立继承关系让子类自动继承父类的属性和方法?
定义一个通用的类,他有基本的实例变量。子类只要继承了该类,就可以拥有这些实例变量。子类也可以定义自己的实例变量。
被继承的类叫超类或父类,继承父类的类叫子类或派生类。
OC中继承的语法规则为:
@interface 子类 : 父类
子类自动继承父类的属性和方法
改进如下
//车类 @interface Car : NSObject { // 品牌 NSString *_brand; //颜色 NSString *_color; } //启动 -(void)star; //刹车 -(void)stop; @end
//卡车类 @interface Truck : NSObject { float _maxWeight; } -(id)initWithlamp:(float)wattage; @end
//出租车类 @interface Taxi : NSObject { float _company; } -(id)initWithengine:(NSString*)model Withcapacity:(NSInteger)capacity; @end
这样就很好的避免了代码的重复编写。
2.2:再谈self/super
2.2.1:再谈self使用self优先调用当前类的方法
当前类如果没有则调用父类。
2.2.1:再谈super
super关键字可以调用从父类继承下来的方法
@implementation Worker -(id)init{ self=[super init]; if(self) { } return self; }
2.3:方法重写
通过方法的重写,子类可以改变从父类继承的行为被重写的方法定义必须与父类中的方法完全一样。
//父类的方法 -(void)work { NSLog(@"人开始干活"); }
//子类重写的方法 -(void)work { NSLog(@"学生开始学习"); }
3.多态:
下面来看一组代码//父类 @implementation Paint -(void)paintf { NSLog(@"打印机打印"); } @end
//子类(重写) @implementation blackPrint -(void)paintf { NSLog(@"黑白"); } @end
//子类(重写) @implementation colorPaint -(void)paintf { NSLog(@"彩色"); } @end
#import "Person.h" @implementation Person //使用彩色打印机 -(void)paintWithColor:(colorPaint*)paint { [paint paintf]; } //使用黑白打印机 -(void)paintWithBlack:(blackPrint*)paint { [paint paintf]; } @end
可以看出来每次增加一个打印机,都要在Person类中增加相应的打印方法,代码的课扩展性和可维护性极差。
这样我们就可以利用多态来解决。
多态是指同一种类型具有多种表现形态。
也就是说不同的子类继承同一个父类这些子类可以看做是同一类型,子类覆盖父类的方法,每个子类实现的功能不相同,这就是多态。
多态的条件
必须存在继承关系
子类重写父类的方法
父类声明的变量指向子类对象
paint*color=[[colorPaint alloc] init]; paint*black=[[blackPrint alloc] init];
解决方法
@implementation Persion -(void)doPaint:(Paint*)paint { [paint paintf]; }
使用多态后,当需要增加新的子类类型时,无需更改Person类,程序的可扩展性和可维护性增强。
相关文章推荐
- Java 面向对象封装、继承、多态——编程思想总结
- c++面向对象三大特征封装、继承和多态知识总结
- 黑马程序员—面向对象(static,封装,继承,多态,内部类,抽象类,接口)总结
- c++面向对象三大特征封装、继承和多态知识总结
- java基础<面向对象>总结(函数、封装、继承、多态)
- JAVA总结(面向对象--封装、继承、多态)
- JavaScript 面向对象(封装、继承、多态)多种方式实现完全总结
- C++面向对象的抽象 封装继承 多态总结
- java学习总结(16.06.10~16.06.17)面向对象的三大特征——封装、继承、多态
- Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)
- 面向对象三大特性概述[封装、继承、多态]
- 黑马程序员<java基础<面向对象(封装,继承,多态,抽象)>>
- 面向对象——Java的封装、继承和多态
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
- 黑马程序员——Objective-C的封装、继承与多态
- 【转】C语言实现C++面向对象的封装、继承、多态机制
- JAVA初等基础__(面向对象三个特征, 封装,继承,多态)
- java笔记—封装、继承、多态[面向对象的三大特性]
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- 对象之间的通信,面向对象的三大特征,封装,继承,多态;以及重写,重载