- 不要直接更改由继承得到的实例变量,一定要通过方法或property属性来更改.
- OC不支持多继承,只能继承一个类;
- 想达到多继承可使用 category, protocol等来实现;
- 继承的语法: @interface Circle : NSObject, 冒号后是需要继承的类;
- 类中没有声明实例变量时可以省略花括号,
- 类需要先声明@interface,然后实现@implementation
- 超类 : 是继承的类,
@interface Shape : NSObject
@interface Circle : Shape
, Circle的超类是Shape, Shape的超类是NSObject; - 父类是超类的另一种表达方式,Shape是Circle的父类;
- 子类,是执行继承的类;
10.改变方法的实现,需要重写override继承的方法;
**
继承的工作机制
**
- 调度: 先在当前的类中找方法,找不到就去超类中找;如
@interface Shape : NSObject
@interface Circle : Shape
,
如果一个方法在Circle类中没找到,将会在Shape类中寻找,如果Shape中没找到,程序会继续在NSObject类中寻找,如此重复的执行此操作,如果在最顶层的NSObject类中也没有找到该方法则会出现运行时错误,同时会出现一个编译时(compile-time)警告. - 每个方法调用都获得了一个名为self的隐藏参数,它是一个指向接收消息的对象的指针,通过self参数来寻找他们需要的实例变量.
- 编译器怎么找到实例变量的地址的呢? 使用的是"基地址加偏移"的机制, 根据对象基地址(第一个实例变量在首个字节在内存中的位置),再在该地址上加上偏移地址,就可以查找其他变量的位置.
重写
子类实现各自的方法,就是重写,调度机制将运行重写后的方法,超类中的方法会被忽略掉.
super关键字
super是调用超类方法的关键字,如果超类中没有定义该消息,则继续在继承链上一级中查找,调用方法如下
[super serFillColor : c]
重写的时候可以使用super调用超类方法,可以充分利用超类代码.