11.1 分类
当我们需要为一个类增加方法的时候,通常我们只需要继承这个类,然后在子类中增加方法即可。然而,这种方式并不是总能奏效的,特别是当我们没有该类的源代码,而需要重新编写该类的某个函数的时候。类别这种技术就允许我们对已经存在的类不用继承也可以为其增加功能。
声明FractionMath的头文件
§ #import “Fraction.h”
§
§ @interface Fraction (Math)
§ -(Fraction*) add: (Fraction*) f;
§ -(Fraction*) mul: (Fraction*) f;
§ -(Fraction*) div: (Fraction*) f;
§ -(Fraction*) sub: (Fraction*) f;
§ @end
FractionMath.m
FractionMath类的实现
§ #import “FractionMath.h”
§
§ @implementation Fraction (Math)
§ -(Fraction*) add: (Fraction*) f {
§ return [[Fraction alloc] initWithNumerator: numerator * [f denominator] +
§ denominator * [f numerator]
§ denominator: denominator * [f denominator]];
§ }
§
§ -(Fraction*) mul: (Fraction*) f {
§ return [[Fraction alloc] initWithNumerator: numerator * [f numerator]
§ denominator: denominator * [f denominator]];
§
§ }
§
§ -(Fraction*) div: (Fraction*) f {
§ return [[Fraction alloc] initWithNumerator: numerator * [f denominator]
§ denominator: denominator * [f numerator]];
§ }
§
§ -(Fraction*) sub: (Fraction*) f {
§ return [[Fraction alloc] initWithNumerator: numerator * [f denominator] -
§ denominator * [f numerator]
§ denominator: denominator * [f denominator]];
§ }@end
main.m
主程序
§ #import
协议和代理
定义一个协议很简单,只要使用@protocol指令。
Printing.h
声明一个Pringting协议
§ @protocol Printing
§ -(void) print;
§ @end
Fraction.h
声明Fraction类的头文件
§ #import