7、面向对象编程中的继承与组合

面向对象编程中的继承与组合

一、继承相关知识
  1. 编译器的“基址加偏移”机制及问题
    • 编译器通过“基址加偏移”机制来定位对象的实例变量。给定对象的基地址(即第一个实例变量的第一个字节的内存位置),编译器通过在该地址上加上偏移量来找到其他实例变量。
    • 例如,若圆角矩形对象的基地址为 0x1000,isa 实例变量位于 0x1000 + 0 即 0x1000。isa 是一个 4 字节的值,那么下一个实例变量 fillColor 从偏移量为 4 的位置开始,即 0x1000 + 4 也就是 0x1004。
    • 这种机制存在问题,偏移量被硬编码到编译器生成的程序中。如果苹果工程师想给 NSObject 添加新的实例变量,会改变所有实例变量的偏移量,这就是脆弱基类问题。不过,Leopard 引入的新 64 位 Objective - C 运行时通过间接方式确定实例变量位置,解决了这个问题。
  2. 方法重写
    • 当创建新的子类时,通常会添加自己的方法。有时会添加引入独特功能的新方法,有时会替换或增强超类定义的现有方法。
    • 例如,对于 Cocoa 的 NSTableView 类,可以添加一个新方法 speakRows,用语音合成器播报列表内容。
    • 也可以创建一个子类来调整从超类继承的现有行为。在 Shapes - Inheritance 中,Shape 类设置了形状的填充颜色和边界,但不知道如何绘制。因为 Shape 是通用的抽象类,每个形状的绘
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值