• OC多态


    要点:

    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
  • 相关阅读:
    2017沈阳站 Tree
    P2146 [NOI2015]软件包管理器
    hdu3307 欧拉函数
    poj 3126 Prime Path bfs
    CSL的字符串
    P1045 麦森数
    洛谷 P1338 末日的传说
    树链剖分
    SQL[Err] ORA-00933: SQL command not properly ended
    Postman 快速入门之脚本
  • 原文地址:https://www.cnblogs.com/jukaiit/p/5777427.html
Copyright © 2020-2023  润新知