黑马程序员****OC语言基础****多态的概念和理解

本文介绍了多态的概念及其在程序设计中的作用,并通过Objective-C语言中的具体实例展示了多态的应用。文章解释了多态如何允许不同对象以各自的方式响应相同名称的方法,以及其实现条件与运行机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

多态指的是: 同一种行为,对于不同的事物具有不同的表现形式。 这就叫做多态。 

程序中的多态:不同的对象以自己的方式响应相同名称方法的能力称为多态 

                    多态的本质是动态绑定,程序知道执行时才确定对象所属的类型,是父类指向子类的指针。

                      多态的条件:有继承关系、有方法重写

                      父类的声明变量指向子类对象。 

             实现:

Animal.h


#import <Foundation/Foundation.h>

@interface Animal : NSObject
-(void)eat;
@end

Animal.m


#import "Animal.h"

@implementation Animal
-(void)eat{
    NSLog(@"动物在吃东西");
}
@end

Dog.h


#import "Animal.h"

@interface Dog : Animal
-(void)jump;
@end

Dog.m


#import "Dog.h"

@implementation Dog
-(void)eat{
    NSLog(@"狗在吃东西");
}
-(void)jump{
    NSLog(@"狗急了,在乱跳");
}

@end

main.m


#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Animal *a = [Dog new];
        [a eat];
//此处如果不强行将a转换成Dog类型,会报错。Animal没jump方法
        [(Dog *)a jump];
    }
    return 0;
}

      运行结果:狗在吃东西

                         狗急了,在乱跳

       以上小知识点:多态情况下,对象调用父类中不存在的方法时(即子类新增的方法),在编译过程中报错。需要将该对象进行类型转换为子类类型,才可正常运行。


  

id是一种通用的对象类型,他可以用来存储任何类的对象。也可以理解为万能指针。

id的定义中已经包含了*号, 指针定义变量时,不需要再加* 号。       

id和instancetype的区别

ios5之后推出了instancetype类型,与id类型相比:

1)instancetype只能作为函数或者方法的返回值

2)id能作为方法或者函数的返回值、参数类型,也能用来定义变量

3)instancetype对比id的好处

* 能精确地限制返回值的具体类型 


#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

    id obj = [Dog new];
    [obj eat];
        
    }
    return 0;
}

      运行结果: 狗在吃东西




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值