1、什么是多态呢?
多态就是...譬如某一天动物园的管理员给让老虎、狗、和猪咆哮,谁咆哮的好听就给谁吃肉,于是它们就开始咆哮了,老虎:“AOOOOO...”,狗:“wangwangwang”,猪:“henghengheng”。我们不管谁叫得好听,得到管理员同样的命令,三只动物用不同的方法咆哮,这久是多态:实现同一个接口,使用不同的实例而执行不同得操作。
2、把不同得子类对象当做父类来看
多态的好处:①可以屏蔽不同子类对象之间的差异,写出通用代码;②做出通用的编程,以使用需求的不断变化。
3、为了能达到多态的好处,必须掌握两大原则
分别是:开闭原则,开闭原则是OCP的基石。核心是,对拓展开放,对修改关闭。意思是,我们为了满足客户的要求,应该通过拓展方式来改变,而不应该修改原有的代码来实现客户的需求。
里氏替换原则:任何基类(父类)出现的地方都可以用子类替换。
多态代码以以上例子为引子:
//管理员类
#import <Foundation/Foundation.h>
#import "Animal.h"
@interface Admin : NSObject
- (void) conduct:(Animal *)animal;
@end
#import "Admin.h"
@implementation Admin
//指挥
- (void) conduct:(Animal *)animal{
NSLog(@"管理员指挥动物咆哮");
[animal roar];
}
@end
//动物类
#import <Foundation/Foundation.h>
@interface Animal : NSObject
@property (retain,nonatomic)NSString *name;
- (void) roar;
- (id) initWithName:(NSString *)newName;
@end
#import "Animal.h"
@implementation Animal
@synthesize name;
- (void)roar{
NSLog(@"发出美妙的咆哮声");
}
- (id) initWithName:(NSString *)newName{
if (self=[super init]) {
name=newName;
}
return self;
}
@end
//小虎类
#import "Animal.h"
@interface Tiger : Animal
@end
#import "Tiger.h"
@implementation Tiger
- (void)roar{
[super roar];
NSLog(@"%@ 美妙的声音,Aooooo",self.name);
}
@end
//小狗类
#import "Animal.h"
@interface Dog : Animal
@end
#import "Dog.h"
@implementation Dog
- (void)roar{
[super roar];
NSLog(@"%@ 美妙的声音,wangwangwang",self.name);
}
@end
//小猪类
#import "Animal.h"
@interface Pig : Animal
@end
#import "Pig.h"
@implementation Pig
- (void)roar{
[super roar];
NSLog(@"%@ 美妙的声音,henghengheng",self.name);
}
@end
//主函数
#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Tiger.h"
#import "Dog.h"
#import "Pig.h"
#import "Admin.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Admin *admin = [[Admin alloc] init];
Tiger *tiger=[[Tiger alloc]initWithName:@"小不湿"];
Dog *dog=[[Dog alloc]initWithName:@"小犬"];
Pig *pig=[[Pig alloc]initWithName:@"不赖而"];
[admin conduct:tiger];
[admin conduct:dog];
[admin conduct:pig];
}
return 0;
}
2013-10-14 20:19:01.382 oc03[1874:303] 管理员指挥动物咆哮
2013-10-14 20:19:01.384 oc03[1874:303] 发出美妙的咆哮声
2013-10-14 20:19:01.384 oc03[1874:303] 小不湿 美妙的声音,Aooooo
2013-10-14 20:19:01.385 oc03[1874:303] 管理员指挥动物咆哮
2013-10-14 20:19:01.386 oc03[1874:303] 发出美妙的咆哮声
2013-10-14 20:19:01.386 oc03[1874:303] 小犬 美妙的声音,wangwangwang
2013-10-14 20:19:01.386 oc03[1874:303] 管理员指挥动物咆哮
2013-10-14 20:19:01.387 oc03[1874:303] 发出美妙的咆哮声
2013-10-14 20:19:01.387 oc03[1874:303] 不赖而 美妙的声音,henghengheng