OC多态

mac2024-11-30  43

要点:

1、多种形态,引用的多种形态对于一个引用变量,可以指向任何类的对象。对于一个父类的引用(类与类之间有一种继承关系),可以指向子类,也可以指向本类,指向的类型不同。当通过此引用向对象发送消息,调用的方法是不同的,此时方法的调用就是多态。

2、类与类之间有关系,继承关系父类的引用可以指向子类的引用或者本类的引用。父类的引用指向子类的对象,发送消息,调用的是子类对象的方法。父类的引用指向本类的对象,发送消息,调用本类的方法。

3、编译期类型和运行期类型*在多态下,父类的引用可以指向子类的引用,当编译的时候,编译器无法确定指向的对象是什么类型,所有编译器会将引用当做父类类型引用编译检查。*在调用方法时,发现确实是子类对象,为子类类型创建空间。

Animal* animal = [[Dog alloc] init];

编译时,把Dog类型当成Animal类型编译。运行时,调用的是Dog类型的对象。

 

代码分析: A是父类,B继承A,C继承B

A中:

#import <Foundation/Foundation.h> @interface A : NSObject - (void)show; @end

 

#import "A.h" @implementation A - (void)show { NSLog(@"A show"); } @end

B中:

#import "A.h" @interface B : A - (void)show; @end #import "B.h" @implementation B - (void)show { NSLog(@"B show"); } @end

C中:

#import "B.h" @interface C : B -(void)show; @end #import "C.h" @implementation C - (void)show { NSLog(@"C show"); } @end

 

在main.m中

//A类型的指针 指向A类型的对象 A *a = [[A alloc]init]; [a show]; //多态 //父类指针 指向 子类对象 B *b = [[B alloc]init]; //这里b show 是调用哪个方法呢? [b show]; //动态监测-调用方法时候会监测对象的真实类型 //C也一样 C *c = [[C alloc]init]; [c show];

 

输出结果:

A show B show C show

 

最新回复(0)