初识Objecive-C 之 多态不得不说的故事

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值