1.继承的概念
2.继承的作用
- 可以通过继承,将所有重复的内容放在一起。
- 子类通过继承就可以获得超类的实例变量和方法。
3.继承语法
@interface 自定义类名 : NSObject
- 在cocoa中,尽量从NSObject或已继承NSObject的类继承。
- objective-c不支持多继承,但可通过其他特性,如分类和协议实现多继承的功能。
- 继承的内容包括:方法和实例变量。 一般只在对继承的方法重载时,才在子类对它声明。
- 继承之后不必再声明超类已有的实例变量,方法。
- 继承常用于扩展一个类
- 不能通过继承删除,减少方法,但可以利用重载来更改继承的定义。
- 不能通过继承减少方法或实例变量,只能添加。
- 分类机制允许以模块方式向现有的类定义添加新方法,尤其适用对没有源代码访问权限的类添加新定义时。
代码实例:
//定一个Shape类接口
@interface Shape : NSObject //类名第一个字母要大写
{
ShapeColor fillColor;
ShapeRect bounds;
}
-(void)setFillColor:(ShapeColor)fillColor;
-(void)setBounds:(ShapeRect)bounds;
-(void)draw;
@end//Shape
//定义一个Circlr类
@interface Circle : Shape //继承了Shape类的方法和变量,不必再声明。
{
}
//可以把函数写在这,但是需要重载
@end//Circle
//定义一个Rectangle类
@interface Rectangle : Shape
{
}
@end//Rectangle
4.类名,第一个字母要大写。
超类:所继承的类,又称父类。
子类:实施继承的类。
重写:改变方法的实现时,需要用到重写。
5.消息调度机制
- 当代码发送消息时,objective-c 的方法调度程序将在当前类中搜索相应的方法。
- 如果调度程序无法在接受消息的对象中找到相应的方法,它就在该对象的超类中进行查找。
6.
- NSObject 声明了一个名为isa的实例变量,该变量保存一个指向对象的类的指针。
- 每个方法都有一个名为self的隐藏参数,指向继承链中第一个类的第一个实例变量。
- 编译器使用基地址加偏移 查找实例变量的位置,对象的基地址指向第一个实例变量的首个字节在内存中的位置。
- isa对应类,self对应方法。
7.重写方法
- 添加全新的方法。
- 修改方法。
- 方法调度程序将使用重写的方法,而忽略超类的方法。重写的方法 优先级大于超类的原方法。
Q:提供某种重写方法时,若仍想调用超类的实现方法?
*---------------------------------------------------------------
| 解决方法: super 关键字
|
|1.可以通过super 实现显示的调用超类方法,如下:
|
|
[super setFillColor : c ];
|
|注意:此处不能写成 [Shape setFillColor : c]; 是实例方法,不是类方法。
|
|2.在子类中重写方法时,常显示的调用超类方法。
|
|3.向super发送消息时,objective-c 向该类的超类发送消息。如果超类中没有定义该消息,将按照通常的方式在继承中继续查找对应的消息。
|
*---------------------------------------------------------------
本课总结:
- 理解oop中继承的概念。
- 场我继承的语法规则。
- 理解objective-c的方法调度机制:无继承、有继承。
- 理解关键字super的作用。
- 掌握在重写方法中调用超类同名方法。
。函数不一定要定义在类中。如果类外的函数要访问类的数据成员,可以使用程序方法来访问。