黑马程序员-OC-继承的多态性

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
多态的概念:
不同的对象以自己的方式响应父类同名的方法,这就是多态。

体现:
父类的指针指向了子类的对象。

多态的条件:
1.有继承关系
2.有方法重写,即子类重写父类方法
多态最终的效果是父类可以引用子类的方法。
新建3个类:Animal, Dog, Cat. 其中Dog, Cat继承Animal类。
Animal类有一个run()方法:

#import "Animal.h"

@implementation Animal
-(void)run{

    NSLog(@"animal is running.");
}
@end

Dog类也只有一个run()方法,不过其重写了父类Animal的run()方法:

#import "Dog.h"

@implementation Dog
-(void)run{
    NSLog(@"dog rushed outof door with the 80 speed.");
}
@end

Cat类派生了一个新的方法welcome(), cat.h中代码:

#import "Animal.h"

@interface Cat : Animal
-(void)welcome;
@end

cat.m中代码:

#import "Cat.h"

@implementation Cat
-(void)run{
    NSLog(@"cat is climbing the tree, so high,so high.");
}
-(void)welcome{
    NSLog(@"cat is waiting its host.");
}
@end

main()函数中代码:

#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Animal *ani = [Animal new];
        [ani run];
        Dog *dog = [[Dog alloc]init];
        [dog run];
        Cat *cat = [[Cat alloc]init];
        [cat run];

        //***************多态写法*************************//

        Animal *ani2 = [Dog new];
        [ani2 run];              //此处调用的是Dog类重写的run方法,不是animal的run方法。
        Animal *ani3 = [Cat new];
        [ani3 run];

        //不能直接调用父类不存在的方法、而在子类存在的方法。因为ani3在系统刚执行时认为其是一个Animal类,而Animal类没有Welcome这个方法,所以编译的时候发生错误。
        //[ani welcome];   这会报错

        //可以进行强制转换,提前告诉系统这是一个Cat类。不过必须有多态的声明。
         //Animal *ani3 = [Cat new];  //如果没有此句代码,执行时会错误
        [(Cat *)ani3 welcome];


    }
    return 0;
}

最终输出结果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值