zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【jquery ,ajax,php】加载更多实例
    关于scrollTop
    jquery 底部导航透明度变化
    jquery 处理密码输入框(input type="password" ) 模仿placeholder
    物化视图基于rowID快速刷新
    ora-01653 无法通过1024扩展
    oracle临时表空间
    java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
    redis 简单使用
    BigDecimal 运算
  • 原文地址:https://www.cnblogs.com/jukaiit/p/5777427.html
Copyright © 2011-2022 走看看