美文网首页
多态-iOS

多态-iOS

作者: 烟雨痕 | 来源:发表于2022-11-03 19:35 被阅读0次

    Swift中的泛型T 实质是一种参数化多态,把类型作为参数的多态,泛型编程

    在编程语言和类型论中,多态是指不同数据类型的实体提供统一的接口。多态类型是指可以将自身所支持的操作套用到其他类型的值上(我们常说的多态是指动态多态,即运行期的,而不是编译期的)。

    多态分为变量多态函数多态

    变量多态:基类型的变量(对于C++是引用或指针)可以被赋值基类型对象,也可以被赋值给派生类型的对象。派生类是继承自基类,是基类的子类。

    函数多态:相同的函数调用(函数名与实参表), 传递给一个对象变量,可以有不同的行为, 根据该对象变量所指向的对象类型所定。因此变量多态是函数多态的基础。

    多态通常来说:父类指针指向子类对象

    /** TestClass.h*/
    @interface TestClass : NSObject
    - (void)saveInfoData;
    @end
    /** SubTestClass.h*/
    @interface SubTestClass : TestClass
    - (void)updateData;
    @end
    
    /** ViewController.m*/
        /** 情况一*/
        /** 父类指针指向子类对象*/
        TestClass *test = [[SubTestClass alloc] init];
        [test saveInfoData];
        
        /**(SubTestClass *)这种强制转换只是改变了指针变量的编译时类型,指向的变量的实际类型是不会变化的 */
        SubTestClass *subTest = (SubTestClass *)test;
        [subTest updateData];
    
        /** 情况二 */
        /** 子类指针指向父类对象*/
        SubTestClass *test1 = [[TestClass alloc] init];
        // log: TestClass -- saveInfoData
        [test1 saveInfoData]; 
        // test1 实际类型是TestClass,
        // '-[TestClass updateData]: unrecognized selector sent to instance 0x600001028b10'
        [test1 updateData];
    
    @end
    

    多态优点:
    1.函数中参数可以是父类,不用每个子类都需要定义一个函数,等于把多个函数归纳为一个函数,简化代码。
    2.接口化的多态,可以用来实现依赖倒置,从而实现组件间或者类之间的解耦。

    @protocol TestProtocol <NSObject>
    
    @optional
    - (void)saveInfoData;
    
    @end
    
    @interface TestClass : NSObject <TestProtocol>
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        /** 情况三*/
        TestClass *testModule = [[TestClass alloc] init];
        [self onSave:testModule];
    }
    
    
    - (void)onSave:(id<TestProtocol>)protocol {
        //  TestClass -- saveInfoData
        [protocol saveInfoData];
    }
    
    @end
    

    参考:
    https://baike.baidu.com/item/%E5%A4%9A%E6%80%81/2282489?fr=aladdin
    https://blog.csdn.net/weixin_61558111/article/details/125034582

    相关文章

      网友评论

          本文标题:多态-iOS

          本文链接:https://www.haomeiwen.com/subject/lisetdtx.html