posing

Posing 有點像 categories,但是不太一樣。它允許你擴充一個 class,並且全面性
地的扮演(pose)這個 super class。例如:你有一個擴充 NSArray 的
NSArrayChild 物件。如果你讓 NSArrayChild 扮演 NSArray,則在你的程式碼中
所有的 NSArray 都會自動被替代為 NSArrayChild。

FractionB.h


#import "Fraction.h"
@interface FractionB: Fraction
-(void) print;
@end


FractionB.m


#import "FractionB.h"
#import <stdio.h>
@implementation FractionB
-(void) print {
printf( "(%i/%i)", numerator, denominator );
}
@end


main.m


#import <stdio.h>
#import "Fraction.h"
#import "FractionB.h"
int main( int argc, const char *argv[] ) {
Fraction *frac = [[Fraction alloc] initWithNumerator: 3 denominator: 10];
// print it
printf( "The fraction is: " );
[frac print];
printf( "/n" );
// make FractionB pose as Fraction
[FractionB poseAsClass: [Fraction class]];
Fraction *frac2 = [[Fraction alloc] initWithNumerator: 3 denominator: 10];
// print it
printf( "The fraction is: " );
[frac2 print];
printf( "/n" );
// free memory
[frac release];
[frac2 release];
return 0;
}


output


The fraction is: 3/10
The fraction is: (3/10)
這個程式的輸出中,第一個 fraction 會輸出 3/10,而第二個會輸出 (3/10)。這是
FractionB 中實作的方式。
poseAsClass 這個 method 是 NSObject 的一部份,它允許 subclass 扮演
superclass。

你可能感兴趣的:(Class,interface)