黑马程序员-OC语言-多态

——- ios培训ios培训、期待与您交流! ———-
什么是多态
多态:是指一种事物的多种形态.

代码体现: 父类的指针指向子类的对象

Dog *d=[Dog new];//普通写法
 Animal *a=[Dog new];//多态写法

多态有什么作用?
具有极强的扩展性.父类的一个指针可以表示不同的子类为对象.

Animal *a=[Dog new];//a指向Dog对象
Animal *a=[Cat new];//a也可以指向Cat对象

多态有什么局限?
父类的指针指向子类时,如果要调用子类的独有方法,必须强转.

代码体现
代码中的注释会详细解释多态的每一个特点

#import <Foundation/Foundation.h>
//父类--动物
@interface Animal : NSObject{
     char *_name;
}
-(void)setName:(char *)name;
-(char *)getName;
-(void)eat;
@end

@implementation Animal
-(void)setName:(char *)name{
    _name=name;
}
-(char *)getName{
    return _name;
}
-(void)eat{
     NSLog(@"动物吃东西...");
}

@end

//动物类的子类-狗
@interface Dog : Animal
-(void)eat;//这个地方的声明可以不写,因为父类中有这个方法的声明
-(void)kanMen;//狗独有的方法
@end
@implementation Dog
//这里是重写了父类中eat方法,Dog对象在调用eat方法是优先调用自己的方法.
-(void)eat{
    NSLog(@"狗吃东西...");
}
-(void)kanMen{
    NSLog(@"狗看门...");
}
@end

//动物类的子类-猫
@interface Cat : Animal
-(void)eat;
@end
@implementation Cat

-(void)eat{
    NSLog(@"猫吃东西...");
}
@end

int main(){
    Animal *am=[Dog new];
   // [am kanMen];//这样调用是不对的,因为kanmen这个方法是子类Dog独有的,不能用多态指针直接调用.
    //用多态的方式调用子类的方法-->强转
    Dog *tempDog=(Dog *)am;
    [tempDog kanMen];
    am=[Cat new];
   [am eat];//am现在只想Cat对象调用的是Cat中重写的eat方法.

    return 0;
}

关于多态的一些思考
1.必须是继承关系的类才可以.而且是父类的指针代表子类对象.
2.可以用父类的指针指向任意一个子类的对象,操作子类对象调用方法,但是如果这个指针想要操作的是子类独有独有方法的时候不太适合用.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值