美文网首页
多态-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开发中,每个类都有自己对应的名字空间...

  • iOS 多态

    定义 多态:不同对象以自己的方式响应相同的消息的能力叫做多态。 生活中:人可以指教师、学生、医生等等。程序中:父类...

  • iOS 多态

    Objective-C语言是面向对象的高级编程语言,因此,它具有面向对象编程所具有的一些特性,即:封装性、继承性和...

  • iOS 多态

    OC三大特性:封装、继承、多态。前两种比较简单,这里讲一下多态。 一. 基本概念 多态在代码中的体现,即为多种形态...

  • 多态-iOS

    Swift中的泛型T 实质是一种参数化多态,把类型作为参数的多态,泛型编程。 在编程语言和类型论中,多态是指不同数...

  • iOS多态和Python多态2018-01-20

    iOS多态 多态就是父类指针指向子类指针 多态是具有表现多种形态的能力的特征,是为了避免在父类里大量重载引起代码臃...

  • 多态

    iOS | 多态的实际运用 一句话概括多态:子类重写父类的方法,父类指针指向子类。 或许你对多态的概念比较模糊,但...

  • IOS多态特性

    用一句话概括就是:事物在运行过程中存在不同的状态。先以教科书般举例说明,下文再举一个花木兰替父从军的例子帮助大家理...

  • iOS 之多态

    iOS之 多态 简述 多态一般都要跟继承结合起来说,其本质是子类通过覆盖或重载父类的方法,来使得对同一类对象同一方...

  • iOS绘图

    ios阶段算法回调多态(观察者模式)把多态真正明白上一大台阶程序设计设计模式if else少出 创建UIBezie...

网友评论

      本文标题:多态-iOS

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