• 4 继承


    说明:处理类和对象的关系时,要重视OOP的两个方面

    • 继承:定义一个具有父类所有功能的新类
    • 复合:在对象中引用其他对象

    4.1 为何使用继承

    说明:将所有重复的内容合并在一起,并在需要的地方拥有自定义的方法。
    不使用继承的架构
    Alt text
    使用继承后的架构
    Alt text

    4.2 继承的语法格式

    说明:@interface 子类名: 父类名

    术语 说明
    超类(或父类) 继承的类
    子类(或孩子类) 执行继承的类
    重写 如果想改变方法的实现,需要重写继承的方法

    注意:O-C不支持多继承(可以使用类别和协议模拟多继承效果)

    4.3 继承的工作机制

    4.3.1 方法调度

    说明:当发送消息时,O-C的方法调度机制将在当前的类中搜索相应的方法。如果无法在接收消息的对象的类文件中找到相应的方法,它就会在该对象的超类中进行查找。
    注意:如果在最顶层的NSObject类中也没有找到该方法,则会出现一个运行时错误。

    大专栏  4 继承quote>

    4.3.2 实例变量

    说明:O-C 中图和访问实例变量

    • 子类会从父类继承实例变量
    • 子类根据自己的情况添加额外的自己的实例变量
    • 每个方法被调用时都获得了一个名为self的参数,self指向继承链中第一个类中的第一个实例变量。

    多态性:使用更具体种类的对象来代替一般类型,这种能力被称为多态性
    扩展:通过对象基地址(第一个实例变量的首个字节在内存中的位置)加上偏移地址,编译器就可以查找其他实例变量的位置。这个机制叫做基地址加偏移,通过硬编码实现,但存在脆弱的基类问题Leopard系统中通过引入64位Objective-C运行时(使用间接寻址方式确定变量的位置)解决了这个问题。

    4.4 重写方法

    super关键字

    说明:利用super,既可以重写方法的实现,又能调用超类中的实现方式。
    原理:既不是参数也不是实例变量,而是由Objective-C编译器提供的一种神奇的功能。当想super发送消息时,实际上是在请求Obective-C向该类的超类发送消息。如果超类中没有定义该消息,则向平常一样继续在继承链上一级中查找。

    4.5 小结

    4.6 举个栗子

    1
    2


  • 相关阅读:
    Typora设置插入图片居左
    android模拟器横屏后屏幕不自动旋转的问题
    (转) word: 通过Office 2007发布博客
    Typora导出文件到github指令
    c++函数式编程 笔记
    关于PostMan的一个坑
    VS Code中Golang远程开发的调试和测试
    在GoLand/Pycharm中安装Copilot时遇到“waiting for github authentication”
    安装kubetest报错 "ambiguous import: found package cloud.google.com/go/storage in multiple modules:"
    window 客户端抓包详解
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12247698.html
Copyright © 2020-2023  润新知