码迷,mamicode.com
首页 > 其他好文 > 详细

OC多态

时间:2016-08-16 18:40:47      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

要点:

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


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


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

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

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

 

代码分析:

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

 

OC多态

标签:

原文地址:http://www.cnblogs.com/jukaiit/p/5777427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!