13、OC 面向对象3大特征:封装、继承、多态
2014-12-08 10:28
363 查看
一、封装
封装指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
好处:隐藏类的内部实现细节;限制对成员变量的不合理访问;有利于保证对象信息的完整性;便于修改,提高代码可维护性。
二、继承
继承指可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
OC采用的是单继承的方式,每个子类有且只有一个父类,但是可以有多个间接父类。
覆盖(Override):子类包含与父类同名的方法。
super关键字:用于限定该对象调用它从父类继承得到的属性或方法。super不能出现在类方法中。
继承需要注意以下几点:
1.子类可以得到父类中定义的成员变量,但是子类接口部分不允许定义与父类重名的成员变量,无论父类是用了何种访问修饰符。
2.子类实现部分可以定义与父类重名的成员变量,这样子类成员变量会隐藏父类成员变量,如需访问父类成员变量,可以使用super关键字。
3.OC采用的是单继承。
三、多态
多态指:不同对象对同一消息有不同响应方式。
OC指针类型的变量有两个,一个是编译时类型,一个是运行时类型;编译时类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定;如果编译时类型和运行时类型不一致,当访问同一个方法时会做出不同的响应,这时就会出现多态。
看一个多态的例子:
父类:
子类:
测试:
输出:
子类说:Hello
子类说:哈哈
子类说:Hello
[b]子类说:哈哈[/b]
封装指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
好处:隐藏类的内部实现细节;限制对成员变量的不合理访问;有利于保证对象信息的完整性;便于修改,提高代码可维护性。
二、继承
继承指可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
OC采用的是单继承的方式,每个子类有且只有一个父类,但是可以有多个间接父类。
覆盖(Override):子类包含与父类同名的方法。
super关键字:用于限定该对象调用它从父类继承得到的属性或方法。super不能出现在类方法中。
继承需要注意以下几点:
1.子类可以得到父类中定义的成员变量,但是子类接口部分不允许定义与父类重名的成员变量,无论父类是用了何种访问修饰符。
2.子类实现部分可以定义与父类重名的成员变量,这样子类成员变量会隐藏父类成员变量,如需访问父类成员变量,可以使用super关键字。
3.OC采用的是单继承。
三、多态
多态指:不同对象对同一消息有不同响应方式。
OC指针类型的变量有两个,一个是编译时类型,一个是运行时类型;编译时类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定;如果编译时类型和运行时类型不一致,当访问同一个方法时会做出不同的响应,这时就会出现多态。
看一个多态的例子:
父类:
#import <Foundation/Foundation.h> @interface Base : NSObject -(void)sayHello; @end #import "Base.h" @implementation Base -(void)sayHello{ NSLog(@"父类说:Hello"); } @end
子类:
#import <Foundation/Foundation.h> #import "Base.h" @interface SubClass : Base -(void)sayHello; -(void)sayHaha; @end #import "SubClass.h" @implementation SubClass -(void)sayHello{ NSLog(@"子类说:Hello"); } -(void)sayHaha{ NSLog(@"子类说:哈哈"); } @end
测试:
int main(int argc, const char * argv[]) { @autoreleasepool { //编译时和运行时类型一致 SubClass* sc = [[SubClass alloc]init]; [sc sayHello]; [sc sayHaha]; //编译时和运行时类型不一致 Base* ba = [[SubClass alloc]init]; [ba sayHello]; //下面一行有错,因为编译时类型没有这个方法 //[ba sayHaha]; //可以使用id类型来访问编译时没有但运行时有的方法 id myBa = ba; [myBa sayHaha]; } return 0; }
输出:
子类说:Hello
子类说:哈哈
子类说:Hello
[b]子类说:哈哈[/b]
相关文章推荐
- OC面向对象的三大特征 封装 ,继承,多态
- OC面向对象的三大特征——封装、继承、多态
- 黑马程序员——OC笔记之面向对象三大特征(封装、继承、多态)
- OC面向对象的三大特征(封装 继承 多态)习题1
- 黑马程序员--OC面向对象的三大特征——封装、继承、多态
- OC面向对象的三大特征(封装 继承 多态)习题3 多态
- OC面向对象的三大特征(封装 继承 多态)习题2 复合
- 封装、继承和多态是面向对象的三大特征。
- 面向对象的三个基本特征-----封装、继承、多态
- 面向对象的三个基本特征-----封装、继承、多态
- 面向对象的三个特征:继承、封装、多态
- java面向对象的3大特征——封装,继承,多态
- 面向对象的三大特征——封装、继承、多态
- 简述Java面向对象三大特征:封装、继承、多态
- 黑马程序员_iOS开发之OC之面向对象之三大特性封装、继承和多态
- 面向对象的三个基本特征是:封装、继承、多态
- 黑马程序员---java基础之面向对象(一)三大特征(封装,继承,多态)
- Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态
- java面向对象的三大特征:封装-继承-多态
- 黑马程序员——OC面向对象三大特性——封装,继承,多态。