2012-06-21 43 views
0

我试图做一个类扩展,并从泛型方法调用扩展方法。我只是想知道是否有可能做到这一点?以下是我的代码。如何在Object-C中重写方法

ClassA.h:

@interface ClassA : NSObject 

-(void) method; 

ClassA.m:

#import "ClassA.h" 

-(void) method{ 
    NSLog(@"do A"); 
} 

ClassB.h:

@interface ClassB : ClassA 

-(void) method; 

ClassB.m:

#import "ClassB.h" 

-(void) method{ 
    NSLog(@"do B"); 
} 

和MainClass.m

-(void) doMethod { 
    ClassA *class = [[ClassB alloc] init]; 
    [class method]; 
} 

我试图做这样的事情,但是什么也没有打印出来。是否有可能做到这一点?并会打印出“做B”?

+2

请发布您的实际代码(此代码不能编译)。此外,这个问题是关于方法重写,而不是类扩展。您可以修复您的标题和标签以反映这一点。 – Perception

回答

3

你的代码编译并运行正常(减去@interface ClassA.h一个小错字,应该是@interface ClassA的):

cristi:tmp diciu$ cat test.m 
#import <Cocoa/Cocoa.h> 

@interface ClassA : NSObject 
- (void) method; 
@end 

@interface ClassB : ClassA 
-(void) method; 
@end 

@implementation ClassA 
-(void) method{ 
    NSLog(@"do A"); 
} 
@end 

@implementation ClassB 
-(void) method{ 
    NSLog(@"do B"); 
} 
@end 

int main() 
{ 
    ClassA *class = [[ClassB alloc] init]; 
    [class method]; 
} 
cristi:tmp diciu$ gcc test.m -framework Cocoa 
cristi:tmp diciu$ ./a.out 
2012-06-21 15:04:22.652 a.out[14408:707] do B 

苹果的Objective-C的文档包含了如何一章继承的作品可在线获得here