继承是面向对象的一个重要的原理 一 继承概述 父类自身也可能有父类,没有父类的类位于层次结构的最顶层,称为(root)根类。OC中可以自己定义根类,当通常不这样做,我们所定义的类都是NSObject 根类的派生类,接口文件中通常这一定义 @interface Fraction:NSObject ... @end 类 Fraction 是从NSObject 派生的,称为NSObject 的子类。NSObject 是 fraction 的父类 继承的概念作用于整个继承链,子类继承父类的所有方法和实例变量,类的每个实例都拥有自己的实例变量,即使这些变量都是继承下来的。
二@class指令 如果不需要引入和处理整个class.h 类,只需要知道是个类名,使用@class 指令可以提高效率.如果需要引用类的方法,@class 指令是不够的,因为编译器需要更多的消息, 例子: @class XYPoint; @interface Rectangle:NSObject -(XYPoint *) origin; @end
可以看出@class 的作用是当编辑器遇到这样的语句 -(XYPoint *) origin; 时,可以告诉编辑器 XYPoint 是一个类的名字,origin 是 XYPoint 类的一个对象
三 重写方法 通过重写方法,可以修改继承方法的定义 例子: - @interface A:NSObject
- -(void) print;
- @end
- @implementation A
- -(void) print
- {
- NSLog(@"%s","A");//输出A;
- }
- @end
- @implementation B:A
- -(void) print
- {
- NSLog(@"%s","B");//输出B;
- }
- @end
- int main(int argc,const char * argv[])
- {
- @autoreleasepool{
- A *a =[[A alloc] int];
- B *b =[[B alloc] int];
- [a print];//打印A
- [b print];//打印B - 子类覆盖后的方法
- }
- }
复制代码
|