您的位置:首页 > 移动开发 > Objective-C

13、OC 面向对象3大特征:封装、继承、多态

2014-12-08 10:28 363 查看
一、封装
封装指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
好处:隐藏类的内部实现细节;限制对成员变量的不合理访问;有利于保证对象信息的完整性;便于修改,提高代码可维护性。

二、继承
继承指可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息